动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
电脑书籍下载:程序设计书籍 | 数据库教程书籍 | 平面与多媒体书籍 | 网络通讯书籍 | 系统管理书籍 | 网络安全书籍 | 认证考试书籍
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Oracle教程 ]的信息



本月文章推荐
.ORACLE在HP-UX下的系列问题处理(.
.如何在oracle存储过程中返回游标.
.Oracle中PL/SQL编程对系统性能的.
.ORACLE数据库恢复技术.
.Oracle基础工具简介.
.如何使用BBED修复损坏的BLOCK.
.教你如何收集Oracle进程中SQL跟踪.
.Oracle DBA优化数据库性能心得体.
.教你轻松掌握修改Oracle数据库表.
.Oracle利用UTL_MAIL发送电子邮件.
.用三个方法设置Oracle数据库穿越.
.rman备份,未用catalog,控制文件丢.
.Oracle数据库无法加载_OraMTS_的.
.DBA实验室:Oracle性能预测的重要.
.一个自动备份数据文件脚本.
.oracle中获取表空间ddl语句.
.手工创建数据库的全部脚本及说明.
.解决Oracle 10g library内存分配.
.Oracle专家调优秘密(一).
.Oracle数据库开发(二).Linux下配.

PL/SQL初学者必读:几十个实用的PL/SQL

发表日期:2008-2-9 |



  第一阶段
  Q.编写一个PL/SQL程序块以显示所给出雇员编号的雇员的具体信息。
  A.
   DECLARE
   erec emp%ROWTYPE;
  BEGIN
   SELECT * INTO erec FROM emp WHERE empno=&雇员编号;
   DBMS_OUTPUT.PUT_LINE('EmpNo' ' ' 'Ename' ' ' 'Job' ' ' 'Manager' ' ' 'HireDate' ' ' 'Salary' ' ' 'Commision' ' ' 'DeptNo');
   DBMS_OUTPUT.PUT_LINE(erec.ename ' ' erec.job ' ' erec.mgr ' ' erec.hiredate ' ' erec.sal ' ' erec.comm ' ' erec.deptno);
  END;
  /
  Q.编写一个PL/SQL程序块以计算某个雇员的年度薪水总额。
  A.
  DECLARE
   esal NUMBER;
   eename emp.ename%TYPE;
  BEGIN
   SELECT (NVL(sal,0)+NVL(comm,0))*12,ename INTO esal,eename FROM emp WHERE empno=&雇员编号;
   DBMS_OUTPUT.PUT_LINE(eename '''s Years Salary is ' esal);
  END;
  /
  Q.按下列加薪比执行:
   Deptno Raise(%age)
  10 5%
  20 10%
  30 15%
  40 20%
  加薪的百分比是以他们现有的薪水为根据的。写一PL/SQL以对指定雇员加薪。
  A.
  DECLARE
   vcounter NUMBER:=10;
   vraise NUMBER;
  BEGIN
   LOOP
   EXIT WHEN vcounter>40;
   UPDATE emp set sal=NVL(sal,0)+NVL(sal,0)*0.05 WHERE deptno=vcounter;
   vcounter:=vcounter+10;
   END LOOP;
  END;
  /
  
  Q.编写一PL/SQL以向"emp"表添加10个新雇员编号。
  (提示:假如当前最大的雇员编号为7900,则新雇员编号将为7901到7910)
  A.
  DECLARE
   vcounter NUMBER;
  BEGIN
   SELECT MAX(empno) INTO vcounter FROM emp;
   FOR i IN 1..10
   LOOP
   vcounter:=vcounter+1;
   INSERT INTO emp(empno) VALUES(vcounter);
   END LOOP;
  END;
  /
  Q.只使用一个变量来解决实验课作业4。
  A
  DECLARE
   erec emp%ROWTYPE;
  -- vraise NUMBER;
  BEGIN
   SELECT * INTO erec
   FROM emp
   WHERE ename='&ename';
   IF erec.job='CLERK' THEN
   UPDATE emp SET sal=sal+500 WHERE empno=erec.empno;
   ELSIF erec.job='SALESMAN' THEN
   UPDATE emp SET sal=sal+1000 WHERE empno=erec.empno;
   ELSIF erec.job='ANALYST' THEN
   UPDATE emp SET sal=sal+1500 WHERE empno=erec.empno;
   ELSE
   UPDATE emp SET sal=sal+2000 WHERE empno=erec.empno;
   END IF;
  -- UPDATE emp SET sal=sal+vraise WHERE empno=erec.empno;
  -- DBMS_OUTPUT.PUT_LINE(vraise);
  END;
  /
  Q.接受两个数相除并且显示结果。假如第二个数为0,则显示消息"DIVIDE BY ZERO"。
  A.
  DECLARE
   num1 NUMBER;
   num2 NUMBER;
  BEGIN
   num1:=#
   num2:=#
   DBMS_OUTPUT.PUT_LINE(num1 '/' num2 ' is ' num1/num2);
  EXCEPTION
   WHEN ZERO_DIVIDE THEN
   DBMS_OUTPUT.PUT_LINE('Didn''t your teacher tell you not to DIVIDE BY ZERO?');
  END;
  /
  
  
  第二阶段
  Q.编写一个PL/SQL程序块,对名字以"A"或"S"开始的所有雇员按他们的基本薪水的10%加薪。
  A.
  DECLARE
   CURSOR c1 IS
   SELECT * FROM emp WHERE SUBSTR(ename,1,1)='A' OR SUBSTR(ename,1,1)='S' FOR UPDATE OF sal;
  
  BEGIN
   FOR i IN c1
   LOOP
   UPDATE emp SET sal=NVL(sal,0)+NVL(sal,0)*0.1 WHERE CURRENT OF c1;
   END LOOP;
  END;
  /
  Q.编写一PL/SQL,对所有的"销售员"(SALESMAN)增加佣金500.
  A.
  DECLARE
   CURSOR c1 IS
   SELECT * FROM emp WHERE job='SALESMAN' FOR UPDATE OF sal;
  BEGIN
   FOR i IN c1
   LOOP
   UPDATE emp SET sal=NVL(sal,0)+500 WHERE CURRENT OF c1;
   END LOOP;
  END;
  /
  Q.编写一PL/SQL,以提升两个资格最老的"职员"为"高级职员"。
(工作时间越长,优先级越高)
  A.
  DECLARE
   CURSOR c1 IS
   SELECT * FROM emp WHERE job='CLERK' ORDER BY hiredate FOR UPDATE OF job;
   --升序排列,工龄长的在前面
  
  BEGIN
   FOR i IN c1
   LOOP
   EXIT WHEN c1%ROWCOUNT>2;
   DBMS_OUTPUT.PUT_LINE(i.ename);
   UPDATE emp SET job='HIGHCLERK' WHERE CURRENT OF c1;
   END LOOP;
  END;
  /
  Q.编写一PL/SQL,对所有雇员按他们基本薪水的10%加薪,假如所增加的薪水大于5000,则取消加薪。
  A.
  DECLARE
   CURSOR c1 IS SELECT * FROM emp FOR UPDATE OF sal;
  
  BEGIN
   FOR i IN c1
   LOOP
  
   IF (i.sal+i.sal*0.1)<=5000 THEN
   UPDATE emp SET sal=sal+sal*0.1 WHERE CURRENT OF c1;
   DBMS_OUTPUT.PUT_LINE(i.sal);
   END IF;
  
   END LOOP;
  END;
  /
  Q.显示EMP中的第四条记录。
  A.
  DECLARE
   CURSOR c1 IS SELECT * FROM emp;
  
  BEGIN
   FOR i IN c1
   LOOP
   IF c1%ROWCOUNT=4 THEN
   DBMS_OUTPUT.PUT_LINE(i. EMPNO ' ' i.ENAME ' ' i.JOB ' ' i.MGR ' ' i.HIREDATE ' ' i.SAL ' ' i.COMM ' ' i.DEPTNO);
   EXIT;
   END IF;
   END LOOP;
  END;
  /
  
  
  第三阶段
  Q.使用REF游标显示"EMP"表中的值。
  A.
  DECLARE
   TYPE emprectyp IS RECORD
   (
   EMPNO emp.empno%TYPE,
   ENAME emp.ename%TYPE,
   JOB emp.job%TYPE,
   MGR emp.mgr%TYPE,
   HIREDATE emp.hiredate%TYPE,
   SAL emp.sal%TYPE,
   COMM emp.comm%TYPE,
   DEPTNO emp.deptno%TYPE
   );
   TYPE emp_cursor IS REF CURSOR RETURN emp%ROWTYPE;
   vemp_cur EMP_CURSOR;
   vemp_rec EMPRECTYP;
  BEGIN
   OPEN vemp_cur FOR SELECT * FROM emp;
   LOOP
   FETCH vemp_cur INTO vemp_rec;
   EXIT WHEN vemp_cur%NOTFOUND;
   DBMS_OUTPUT.PUT(vemp_rec.empno' 'vemp_rec.ename' 'vemp_rec.job);
   DBMS_OUTPUT.PUT(vemp_rec.mgr' 'vemp_rec.hiredate' 'vemp_rec.sal);
   DBMS_OUTPUT.PUT_line(vemp_rec.comm' 'vemp_rec.deptno);
   END LOOP;
   CLOSE vemp_cur;
  END;
  /
  Q.从"EMP"中获得值送到PL/SQL表,将PL/SQL表中的薪水值增加500,并向用户显示增加的薪水及其他具体信息。
  A.
  DECLARE
   TYPE emprec IS RECORD
   (
   EMPNO emp.empno%TYPE,
   ENAME emp.ename%TYPE,
   JOB emp.job%TYPE,
   MGR emp.mgr%TYPE,
   HIREDATE emp.hiredate%TYPE,
   SAL emp.sal%TYPE,
   COMM emp.comm%TYPE,
   DEPTNO emp.deptno%TYPE
   );
  
   i BINARY_INTEGER:=1;
  
   TYPE emp_tab IS TABLE OF EMPREC INDEX BY binary_integer;
   vemp EMP_TAB;
  
   CURSOR c1 IS SELECT * FROM emp;
  BEGIN
   FOR x IN c1
   LOOP
   vemp(i).empno:=x.empno;
   vemp(i).ename:=x.ename;
   vemp(i).job:=x.job;
   vemp(i).mgr:=x.mgr;
   vemp(i).hiredate:=x.hiredate;
   vemp(i).sal:=x.sal+500;
   vemp(i).comm:=x.comm;
   vemp(i).deptno:=x.deptno;
   i:=i+1;
   END LOOP;
  
   FOR j IN 1..i-1
   LOOP
   DBMS_OUTPUT.PUT(vemp(j).empno' 'vemp(j).ename' 'vemp(j).job);
   DBMS_OUTPUT.PUT(vemp(j).mgr' 'vemp(j).hiredate' 'vemp(j).sal);
   DBMS_OUTPUT.PUT_line(vemp(j).comm' 'vemp(j).deptno);
  
   END LOOP;
  END;
  /
  Q.一旦将值送到PL/SQL表后,尝试在PL/SQL表中插入新记录并且删除某些现有的记录。

  A.
  DECLARE
   TYPE emprec IS RECORD
   (
   EMPNO emp.empno%TYPE,
   ENAME emp.ename%TYPE,
   JOB emp.job%TYPE,
   MGR emp.mgr%TYPE,
   HIREDATE emp.hiredate%TYPE,
   SAL emp.sal%TYPE,
   COMM emp.comm%TYPE,
   DEPTNO emp.deptno%TYPE
   );
  
   i BINARY_INTEGER:=1;
  
   TYPE emp_tab IS TABLE OF EMPREC INDEX BY binary_integer;
   vemp EMP_TAB;
  
   CURSOR c1 IS SELECT * FROM emp;
  BE
上一篇:在UNIX下让ORACLE定时执行*.sql文件 人气:358
下一篇:Oracle Web应用开发之Apache架设与PL/SQL页面设计 人气:414
浏览全部Oracle教程的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-7-24 Sablog-X v2.0 预览版
2008-7-24 帝国备份王EmpireBak 2008 正式版
2008-7-24 网趣网上购物系统时尚版 v8.2
2008-7-24 纵横B2B电子商务系统XYECS!B2B v
2008-7-24 e路小说小偷 v1.2.0723
2008-7-24 凌风美女图片站程序 v2.2
2008-7-24 TOM15电影收索程序
2008-7-24 清风信息自动采集生成系统 v1.0
2008-7-24 QQ邮箱编辑器 v1.0 (小小菜刀ASP
2008-7-19 UltraEdit 简体中文增强版 14.10
2008-7-19 CentOS 5.2 i386 LiveCD
2008-7-19 Snapture多功能相机 v1.4
2008-7-19 iAcces中文输入法 v1.0Build016
2008-7-19 Cookbook烹饪秘籍 v2.5
2008-7-19 苹果专用DVD转换工具 v1.1.59汉化
2008-7-19 Modem修复软件ZiPhone修改版04.0
2008-7-19 AgileMessenger即时通讯工具美化
2008-7-19 Sketches画图软件 v0.7b6破解版


  发表评论
姓 名: 验证码:
内 容:
[ 汉字翻译拼音 ] [ 广告代码 ] [ 符号对照表 ] [ 进制转换 ] [ 经典小工具 ] [ 个税计算 ] [ 汉字简繁转换 ] [ 普通单位换算 ] [ 公制单位换算 ]
[ 生辰老黄历 ] [ 国内电话区号 ] [ 国家代码与域名缩写 ] [ 文字加密解密 ] [ 健康查询 ] [ 万年历 ] [ 手机号码查询 ] [ ip搜索 ] [ Google PR查询 ]
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号