zoukankan      html  css  js  c++  java
  • 【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;
  • 相关阅读:
    HDU1164_Eddy's research I_素数筛选法
    HDU1213_How Many Tables
    HDU1049_数学水题
    HDU1286_找新朋友_筛选法
    HDU1128_Self Numbers_筛选法
    HDU3199_Hamming Problem_类似丑数
    HDU1297_Children’s Queue_递推题
    HDU1856_More is better
    HDU1397_Goldbach's Conjecture_素数筛选法
    HDU1272_并查集
  • 原文地址:https://www.cnblogs.com/tomatoes-/p/6104386.html
Copyright © 2011-2022 走看看