ORACLE游标

游标分为 隐式游标,显式游标,动态游标。
如果想在运行的时候动态确定结果集,就要使用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

 

游标遍历一个表

DECLARE
CURSOR C IS SELECT * FROM EMP;
L_REC EMP%ROWTYPE;
BEGIN
OPEN C;
LOOP
FETCH C INTO L_REC;
EXIT WHEN C%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(L_REC.ENAME);
END LOOP;
END;


 

DECLARE
CURSOR C IS SELECT * FROM EMP;
L_REC EMP%ROWTYPE;
BEGIN
FOR L_REC IN C LOOP
DBMS_OUTPUT.PUT_LINE(L_REC.ENAME);
END LOOP;
END;

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

DECLARE
L_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;


 

DECLARE
CURSOR C_DEPT(P_DEPTNO NUMBER)
IS
SELECT * FROM EMP WHERE EMP.DEPTNO=P_DEPTNO;
R_EMP EMP%ROWTYPE;
BEGIN
FOR R_EMP IN C_DEPT(20) LOOP
DBMS_OUTPUT.PUT_LINE(R_EMP.ENAME);
END LOOP;
END;


 

posted on 2012-05-02 21:16  java课程设计  阅读(207)  评论(0编辑  收藏  举报

导航