二十、游标的属性及带参游标

版权声明:本文为博主原创文章,未经博主允许欢迎转载,请注明原文链接。一起交流,共同进步。 https://blog.csdn.net/newbie_907486852/article/details/84593028

                      游标的属性及带参游标

1、%ISOPEN判断游标是否打开

DECLARE
    CURSOR emp_cur
    IS SELECT * FROM EMP;      --声明游标
    
    
    emp_var EMP%ROWTYPE;       --声明变量:变量emp_var是表EMP的行类型
    
    
    BEGIN                      
        IF  emp_cur%ISOPEN THEN       		--判断游标是否打开
           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;
        ELSE 
          DBMS_OUTPUT.put_line('游标emp_cur没有被打开');
        END IF;
    END;

2、%FOUND、%NOTFOUND判断数据是否有效

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;      --获取游标数据
          IF  emp_cur%FOUND THEN
             DBMS_OUTPUT.put_line(emp_var.EMPNO ||'-'|| emp_var.ENAME||'-'||emp_var.JOB||'-'||emp_var.MGR);   
             --输出数据
          ELSE 
            DBMS_OUTPUT.put_line('没有数据被提取');
            EXIT;
          END IF;
        END LOOP;
      CLOSE emp_cur;                        --关闭数据  
    END;

3、%ROWCOUNT判断条数

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;      --获取游标数据
          IF  emp_cur%FOUND THEN
             DBMS_OUTPUT.put_line(emp_var.EMPNO ||'-'|| emp_var.ENAME||'-'||emp_var.JOB||'-'||emp_var.MGR);   
             --输出数据
             DBMS_OUTPUT.put_line('读取了第'|| emp_cur%ROWCOUNT ||'条');
          ELSE 
            DBMS_OUTPUT.put_line('没有数据被提取');
            EXIT;
          END IF;
        END LOOP;
      CLOSE emp_cur;                        --关闭数据  
    END;

结果:

7369-SMITH-CLERK-7902
读取了第1条
7499-ALLEN-SALESMAN-7698
读取了第2条
7521-WARD-SALESMAN-7698
读取了第3条
7566-JONES-MANAGER-7839
读取了第4条
7654-MARTIN-SALESMAN-7698
读取了第5条
7698-BLAKE-MANAGER-7839
读取了第6条
7782-CLARK-MANAGER-7839
读取了第7条
7788-SCOTT-ANALYST-7566
读取了第8条
7839-KING-PRESIDENT-
读取了第9条
7844-TURNER-SALESMAN-7698
读取了第10条
7876-ADAMS-CLERK-7788
读取了第11条
7900-JAMES-CLERK-7698
读取了第12条
7902-FORD-ANALYST-7566
读取了第13条
7934-MILLER-CLERK-7782
读取了第14条
没有数据被提取

4、带参数游标

DECLARE
    CURSOR emp_cur(deptno_var NUMBER)
    IS SELECT * FROM EMP WHERE DEPTNO=deptno_var;      --声明游标
    
    emp_var EMP%ROWTYPE;       --声明变量:变量emp_var是表EMP的行类型
    
    BEGIN                      
      OPEN emp_cur(30);                         --打开游标
           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;

结果:

7499-ALLEN-SALESMAN-7698
7521-WARD-SALESMAN-7698
7654-MARTIN-SALESMAN-7698
7698-BLAKE-MANAGER-7839
7844-TURNER-SALESMAN-7698
7900-JAMES-CLERK-7698

猜你喜欢

转载自blog.csdn.net/newbie_907486852/article/details/84593028
今日推荐