• PL/SQL — 隐式游标


    一、隐式游标的定义及其属性
    定义
    隐式游标由系统自动定义,非显示定义游标的DML语句即被赋予隐式游标属性。其过程由oracle控制,完全自动化。隐式游标的名称是SQL,不能对SQL游标显式地执行OPEN,FETCH,CLOSE语句。
    属性
    类似于显示游标,隐式游标同样具有四种属性,只不过隐式游标以SQL%开头,而显示游标以Cursor_name%开头通过SQL%总是只能访问前一个DML操作或单行SELECT操作的游标属性,用于判断DML执行的状态和结果,进而控制程序的流程

    SQL%ISOPEN   
    游标是否打开。当执行select into ,insert update,delete时,Oracle会隐含地打开游标,且在该语句执行完毕或隐含地关闭游标,因为是隐式游标,故SQL%ISOPEN总是false  
       
    SQL%FOUND  
    判断SQL语句是否成功执行。当有作用行时则成功执行为true,否则为false。
       
    SQL%NOTFOUND   
    判断SQL语句是否成功执行。当有作用行时否其值为false,否则其值为true。
       
    SQL%ROWCOUNT  
    在执行任何DML语句之前,SQL%ROWCOUNT的值都是NULL,对于SELECT INTO语句,如果执行成功,SQL%ROWCOUNT的值为,如果没有成功,SQL%ROWCOUNT的值为,同时产生一个异常NO_DATA_FOUND。
       
    二、演示
    1.SQL%FOUND的使用
    DECLARE
      v_empno emp.empno%TYPE:=&no;
    BEGIN
      UPDATE emp SET sal=sal+200 --根据给定的empno,更新一条记录
      WHERE empno=v_empno;
      IF SQL%FOUND OR SQL%COUNT>0 THEN  --使用SQL游标属性SQL%FOUND,SQL%COUNT
           COMMIT;
           DBMS_OUTPUT.PUT_LINE('SQL code is executed successful');
      ELSE
           DBMS_OUTPUT.PUT_LINE('The Employee is not exist');
           ROLLBACK;
      END IF;
    END;
     
    Enter value for no: 7788
    old   2:   v_empno emp.empno%TYPE:=&no;
    new   2:   v_empno emp.empno%TYPE:=7788;
    SQL code is executed successful
     
    PL/SQL procedure successfully completed

     

  • 相关阅读:
    __declspec(noinline)
    硬件遮挡查询
    #pragma pack(*) 与 __declspec(align(*))
    Interesting. 如何获取一个数组长度
    __declspec(novtable)
    如何将一个float的小数部分保存成RGBA4个8位的byte
    plain old C++ functions, base模板函数与特化的模板函数
    LeetCode 5: Longest Palindromic Substring
    LeetCode 335:Self Crossing 自交
    LeetCode 649:Dota2 Senate
  • 原文地址:https://www.cnblogs.com/toughhou/p/3778744.html
Copyright © 2020-2023  润新知