ORACLE游标

来源:互联网 发布:成吉思汗舞曲格格 知乎 编辑:程序博客网 时间:2024/06/08 11:57

游标分为 隐式游标,显式游标,动态游标。
如果想在运行的时候动态确定结果集,就要使用ref游标和游标变量。 创建ref游标需要两个步骤:1 声明ref cursor类型 2 声明 ref cursor类型变量。 语法如下: type ref_cursor_name is ref cursor [return record_type] 其中,return 用于指定游标提取结果集的返回类型。有return表示是强类型ref游标, 没有return表示是弱类型的游标。弱类型游标可以提取任何类型的结果集.

在PL/SQL中可以执行动态SQL语句,execute immediate 语句只能语句处理返回单行 或没有返回的SQL语句,ref游标则可以处理返回结果集的动态SQL。ref游标的声明 方法与普通ref游标相同,只是在open时指定了动态SQL字符串。 open cursor_name for dynamic_select_string [using bind_argument_list]

隐式游标SQL%ISOPEN,SQL%FOUND,SQL%NOFOUND,SQL%ROWCOUNT

 

游标遍历一个表

DECLARECURSOR C IS SELECT * FROM EMP;L_REC EMP%ROWTYPE;BEGINOPEN C;LOOPFETCH C INTO L_REC;EXIT WHEN C%NOTFOUND;DBMS_OUTPUT.PUT_LINE(L_REC.ENAME);END LOOP;END;


 

DECLARECURSOR C IS SELECT * FROM EMP;L_REC EMP%ROWTYPE;BEGINFOR L_REC IN C LOOPDBMS_OUTPUT.PUT_LINE(L_REC.ENAME);END LOOP;END;

 比较上面两个程序段可以看到,若用FOR循环不需要OPEN CURSOR;而使用fetch 则需要OPEN CURSOR

DECLAREL_REC EMP%ROWTYPE;TYPE REF_MYCURSOR IS REF CURSOR;AA REF_MYCURSOR;BEGIN  OPEN AA FOR SELECT * FROM EMP;  LOOP    FETCH AA INTO L_REC;    EXIT WHEN AA%NOTFOUND;    DBMS_OUTPUT.PUT_LINE(L_REC.ENAME);  END LOOP;END;


 

DECLARECURSOR C_DEPT(P_DEPTNO NUMBER)ISSELECT * FROM EMP WHERE EMP.DEPTNO=P_DEPTNO;R_EMP EMP%ROWTYPE;BEGINFOR R_EMP IN C_DEPT(20) LOOPDBMS_OUTPUT.PUT_LINE(R_EMP.ENAME);END LOOP;END;


 

原创粉丝点击