PL/SQL练习显式游标

Posted Tomatoes

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PL/SQL练习显式游标相关的知识,希望对你有一定的参考价值。

cursor --------需要用户先定义,在select时,可以用于处理多行记录

1、declare  声明一个游标

2、open cursor (隐式游标自动open)

3、fetch cursor 读取记录到变量(在select时,可以通过循环的方式读取多行记录)

4、判断游标是否为空(到达最后一行记录)

5、close cusor 关闭游标

%isopen  判断游标是否open %found    判断游标是否为非空 %notfound  判断游标是否为空 %rowcount   在游标中处理的数据行数

①案例:通过显式游标select读取多行数据

SQL> declare
  2   cursor cur_emp is
  3    select * from emp where deptno=&no;
  4  
  5   emp_rec   emp%rowtype;
  6  
  7   begin
  8     if not cur_emp%isopen then
  9         open cur_emp;
 10     end if;
 11  
 12     loop
 13         fetch  cur_emp into emp_rec ;
 14     exit when cur_emp%notfound ;
 15  
 16       dbms_output.put_line( emp_rec.ename || , ||emp_rec.sal|| , || emp_rec.deptno );
 17     end loop;
 18   close cur_emp;
 19  
 20  end;

②通过for循环读取游标数据:

SQL> declare
  2      cursor cur_emp is
  3     select * from emp where deptno=&no;
  4  
  5    begin
  6        for emp_rec in cur_emp loop
  7         dbms_output.put_line( emp_rec.ename || , ||emp_rec.sal|| , || emp_rec.deptno );
  8        end loop;
  9  
 10    end;

③带有参数的游标:通过参数传递给游标

SQL> declare
  2  
  3     cursor  emp_cur (v_deptno number) is
  4       select * from emp where deptno=v_deptno;
  5    emp_rec   emp%rowtype;
  6  
  7    begin
  8      if not emp_cur%isopen then
  9          open emp_cur(30);
 10      end if;
 11      loop
 12          fetch emp_cur into emp_rec ;
 13          exit when emp_cur%notfound;
 14          dbms_output.put_line( emp_rec.ename || , ||emp_rec.sal|| , || emp_rec.deptno );
 15      end loop;
 16      end;
SQL>  declare
  2  
  3     cursor  emp_cur (v_deptno number) is
  4       select * from emp where deptno=v_deptno;
  5    emp_rec   emp%rowtype;
  6  
  7    begin
  8      if not emp_cur%isopen then
  9          open emp_cur(20);
 10      end if;
 11      loop
 12          fetch emp_cur into emp_rec ;
 13          exit when emp_cur%notfound;
 14          dbms_output.put_line( emp_rec.ename || , ||emp_rec.sal|| , || emp_rec.deptno );
 15      end loop;
 16      end;

④在for循环中嵌套游标(游标不需要declare)

SQL> begin
  2          for emp_rec in (select * from emp where deptno=&no) loop
  3              dbms_output.put_line( emp_rec.ename || , ||emp_rec.sal|| , || emp_rec.deptno );
  4          end loop;
  5  
  6  end;

 

以上是关于PL/SQL练习显式游标的主要内容,如果未能解决你的问题,请参考以下文章

实验七:PL/SQL编程基础

实验七-附加:PL/SQL编程基础

PL/SQL 游标的使用详解

为啥我们不需要在 pl sql 的 for 循环中打开和获取显式游标?

PL/SQL编程_游标

PL/SQL 编程游标存储过程函数