REF CURSOR和CURSOR

REF CURSOR

DECLARE
    TYPE TY_EMP_CUR IS REF CURSOR;
    V_Emp_Cur              TY_EMP_CUR;
    V_Id                           EMP.ID%TYPE;
BEGIN
    OPEN  V_Emp_Cur   FOR    SELECT ID FROM EMP;      --REF CURSOR的SELECT语句赋值位置,可以在逻辑模块中再次更改
    FETCH  V_Emp_Cur  INTO  V_Id;                                     --FETCH的作用的读取当前指针并移动到下一个指针目标
    WHILE  V_Emp_Cur%FOUND  LOOP
        DBMS_OUTPUT.PUT_LINE(V_Id);
        FETCH  V_Emp_Cur  INTO  V_Id;
    END LOOP;
EXCEPTION
    WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE('Other exceptions');
        CONTINUE;
END;

CURSOR

DECLARE
    CURSOR V_Emp_Cur IS SELECT ID FROM EMP;           --传统CURSOR的SELECT语句赋值位置,后期不可更改
    V_Id                              EMP.ID%TYPE;
BEGIN
    OPEN  V_Emp_Cur;
    FETCH  V_Emp_Cur  INTO  V_Id;                                     --FETCH的作用的读取当前指针并移动到下一个指针目标
    WHILE  V_Emp_Cur%FOUND  LOOP
        DBMS_OUTPUT.PUT_LINE(V_Id);
        FETCH  V_Emp_Cur  INTO  V_Id;
    END LOOP;
EXCEPTION
    WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE('Other exceptions');
        CONTINUE;
END;

 

总结:REF CURSOR和传统的CURSOR相比,传统的CURSOR只能在定义模块中给予该CURSOR相应的SELECT语句去完成定义,且不能后期在逻辑模块再次进行改变,用途很局限,除非SELECT语句不会变化;而REF CURSOR更像是定义一种类型,在定义模块中定义完TYPE和此TYPEVARIABLE,在逻辑模块中去给予SELECT语句,相当于赋值变量,用法灵活,更方便遍历、绑定变量等实际中应用比较多的操作。

posted @ 2016-03-30 16:30  JeromeZ  阅读(643)  评论(0编辑  收藏  举报