十九、显式游标的基本使用

                                 显式游标的基本使用

游标分两大类:静态游标、动态游标(REF游标)
静态游标分两类:显示游标、隐式游标

1、显示游标的使用

DECLARE
    CURSOR emp_cur
    IS SELECT * FROM EMP;      --声明游标
    
    
    emp_var EMP%ROWTYPE;       --声明变量:变量emp_var是表EMP的行类型
    
    
    BEGIN                      
      OPEN emp_cur;                         --打开游标
           FETCH emp_cur INTO emp_var;      --获取游标数据
           DBMS_OUTPUT.put_line(emp_var.EMPNO ||'-'|| emp_var.ENAME||'-'||emp_var.JOB||'-'||emp_var.MGR);   
           --输出数据
      CLOSE emp_cur;                        --关闭数据  
    END;

结果:

7369-SMITH-CLERK-7902

2、游标中的LOOP语句

DECLARE
    CURSOR emp_cur
    IS SELECT * FROM EMP;      --声明游标
    
    
    emp_var EMP%ROWTYPE;       --声明变量:变量emp_var是表EMP的行类型
    
    
    BEGIN                      
      OPEN emp_cur;                         --打开游标
           LOOP
               FETCH emp_cur INTO emp_var;      --获取游标数据
               EXIT WHEN emp_cur%NOTFOUND;      --结束循环
               DBMS_OUTPUT.put_line(emp_var.EMPNO ||'-'|| emp_var.ENAME||'-'||emp_var.JOB||'-'||emp_var.MGR);   
               --输出数据
           END LOOP;
      CLOSE emp_cur;                        --关闭数据  
    END;

结果:

7369-SMITH-CLERK-7902
7499-ALLEN-SALESMAN-7698
7521-WARD-SALESMAN-7698
7566-JONES-MANAGER-7839
7654-MARTIN-SALESMAN-7698
7698-BLAKE-MANAGER-7839
7782-CLARK-MANAGER-7839
7788-SCOTT-ANALYST-7566
7839-KING-PRESIDENT-
7844-TURNER-SALESMAN-7698
7876-ADAMS-CLERK-7788
7900-JAMES-CLERK-7698
7902-FORD-ANALYST-7566
7934-MILLER-CLERK-7782

3、使用FETCH…BULK COLLECT INTO批量提取数据

DECLARE
    CURSOR emp_cur
    IS SELECT * FROM EMP;      --声明游标
    
    
    TYPE EMP_TABLE IS TABLE OF EMP%ROWTYPE;       --声明类型
    emp_var  EMP_TABLE;                           --变量:该变量用于存放批量得到的数据(看成集合)
    
    BEGIN                      
      OPEN emp_cur;                         --打开游标
           LOOP
               FETCH emp_cur BULK COLLECT INTO emp_var LIMIT 2;      --获取游标数据(集合),每次提取2条
               FOR i IN 1..emp_var.count  LOOP 
                 DBMS_OUTPUT.put_line(emp_var(i).EMPNO ||'-'|| emp_var(i).ENAME||'-'||emp_var(i).JOB||'-'||emp_var(i).MGR);   
                 --输出数据
               END LOOP;
               EXIT WHEN emp_cur%NOTFOUND;      --结束循环
           END LOOP;
      CLOSE emp_cur;                        --关闭数据  
    END;

结果:

7369-SMITH-CLERK-7902
7499-ALLEN-SALESMAN-7698
7521-WARD-SALESMAN-7698
7566-JONES-MANAGER-7839
7654-MARTIN-SALESMAN-7698
7698-BLAKE-MANAGER-7839
7782-CLARK-MANAGER-7839
7788-SCOTT-ANALYST-7566
7839-KING-PRESIDENT-
7844-TURNER-SALESMAN-7698
7876-ADAMS-CLERK-7788
7900-JAMES-CLERK-7698
7902-FORD-ANALYST-7566
7934-MILLER-CLERK-7782

4、CURSOR FOR LOOP简化循环

DECLARE
    CURSOR emp_cur
    IS SELECT * FROM EMP;      --声明游标
    
    BEGIN                      
       FOR emp_var IN emp_cur
       LOOP
         DBMS_OUTPUT.put_line(emp_var.EMPNO ||'-'|| emp_var.ENAME||'-'||emp_var.JOB||'-'||emp_var.MGR);   
         --输出数据
       END LOOP; 
    END;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值