zoukankan      html  css  js  c++  java
  • ORACLE的显式游标与隐式游标

    1)查询返回单行记录时→隐式游标;

    2)查询返回多行记录并逐行进行处理时→显式游标

    显式游标例子:

    DECLARE
      CURSOR CUR_EMP IS
        SELECT * FROM EMP;
      ROW_EMP CUR_EMP%ROWTYPE;
    BEGIN
      OPEN CUR_EMP;
      FETCH CUR_EMP
        INTO ROW_EMP;
      WHILE CUR_EMP%FOUND LOOP
        DBMS_OUTPUT.PUT_LINE(ROW_EMP.EMPNO || '----' || ROW_EMP.ENAME);
        FETCH CUR_EMP
          INTO ROW_EMP;
      END LOOP;
      CLOSE CUR_EMP;
    END;

    执行结果看窗口中的Output

    --使用显式游标修改数据(给所有的部门经理加薪1000)

    DECLARE
      CURSOR EMP_CUR IS
        SELECT EMPNO, ENAME, SAL FROM EMP WHERE JOB = 'MANAGER' FOR UPDATE;
      EMP_ROW EMP_CUR%ROWTYPE;
    BEGIN
      OPEN EMP_CUR;
      LOOP
        FETCH EMP_CUR
          INTO EMP_ROW;
        IF EMP_CUR%NOTFOUND THEN
          EXIT;
        ELSE
          UPDATE EMP SET SAL = SAL + 1000 WHERE CURRENT OF EMP_CUR;
        END IF;
      END LOOP;
      COMMIT;
      CLOSE EMP_CUR;
    END;

    注意:

    1、如果游标打开之前或关闭之后,使用游标属性,Oracle会抛出一个INVALID_CURSOR错误(ORA-01001);

    2、如果在第一次fetch后结果集是空的,%found=false,%NotFound=true,%ROWCOUNT=0;

    3、如果使用了BULK COLLECT,那么%ROWCOUNT的值可能不是0或1,实际上他返回的是提取到相关集合的行数。

    DECLARE
      CURSOR EMP_CUR IS
        SELECT EMPNO, ENAME, SAL FROM EMP WHERE JOB = 'MANAGER' FOR UPDATE;
    BEGIN
      FOR EMP_ROW IN EMP_CUR LOOP
        UPDATE EMP SET SAL = SAL - 1000 WHERE CURRENT OF EMP_CUR;
      END LOOP;
      COMMIT;
    END;

    --游标for循环(给所有的部门经理减薪1000

    DECLARE
      CURSOR EMP_CUR IS
        SELECT * FROM EMP FOR UPDATE;
    BEGIN
      FOR EMP_ROW IN EMP_CUR LOOP
        IF EMP_ROW.JOB = 'MANAGER' THEN
          UPDATE EMP SET SAL = SAL + 5000 WHERE CURRENT OF EMP_CUR;
        ELSE
          UPDATE EMP SET SAL = SAL + 1000 WHERE CURRENT OF EMP_CUR;
        END IF;
      END LOOP;
    END;

        游标FOR循环确实很好的简化了游标的开发,我们不再需要 open、fetch和close语句,不再需要用  %FOUND  属性检测是否到最后一条记录,这一切Oracle隐式的帮我们完成了。

  • 相关阅读:
    2021 2月 构建之法读书笔记
    2021 2 7 体温登记App开发总结
    2021 2 3android开发学习笔记 8
    2021 2 2 android开发学习笔记 7
    2021 1月 梦断代码读后感
    2021 2 1 android开发学习笔记 6
    2021 1 31 Android开发 学习笔记 5
    2021 1 28 android开发学习笔记 4
    2021 1 27 android开发学习笔记3
    Java作业(一)
  • 原文地址:https://www.cnblogs.com/yhoralce/p/7887382.html
Copyright © 2011-2022 走看看