中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 数据库开发 > 数据库综合
几十个实用的PL/SQL(3)
作者:未知 时间:2004-03-30 12:12 出处:Blog 责编:chinaitpower
              摘要:暂无

第三阶段

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;

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;

              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;

 

       --插入记录

       DBMS_OUTPUT.PUT_LINE('插入记录:');

       vemp(i).empno:=1000;

       vemp(i).ename:='Goldens';

       vemp(i).job:='Software';

       vemp(i).mgr:=null;

       vemp(i).hiredate:='2003-01-04';

       vemp(i).sal:=8888;

       vemp(i).comm:=10;

       vemp(i).deptno:=10;

      

       FOR j IN 1..i

       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;

       --删除第56条记录

       DBMS_OUTPUT.PUT_LINE('删除第56条记录:');

       FOR j IN 5..i-2

       LOOP

              vemp(j).empno:=vemp(j+2).empno;

              vemp(j).ename:=vemp(j+2).ename;

              vemp(j).job:=vemp(j+2).job;

              vemp(j).mgr:=vemp(j+2).mgr;

              vemp(j).hiredate:=vemp(j+1).hiredate;

              vemp(j).sal:=vemp(j+2).sal;

              vemp(j).comm:=vemp(j+2).comm;

              vemp(j).deptno:=vemp(j+2).deptno;

       END LOOP;

       vemp(i-1).empno:=null;

       vemp(i-1).ename:=null;

       vemp(i-1).job:=null;

       vemp(i-1).mgr:=null;

       vemp(i-1).hiredate:=null;

       vemp(i-1).sal:=null;

       vemp(i-1).comm:=null;

       vemp(i-1).deptno:=null;

       vemp(i).empno:=null;

       vemp(i).ename:=null;

       vemp(i).job:=null;

       vemp(i).mgr:=null;

       vemp(i).hiredate:=null;

       vemp(i).sal:=null;

       vemp(i).comm:=null;

       vemp(i).deptno:=null;

 

       FOR j IN 1..i-2

       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;

/

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有