oracle12C--處理遊標操作(62)

  • 說明
    • 定義:動態SQL除了處理單行查詢操作外,還可以利用遊標完成多行數據的操作;在遊標定義時也同樣可以使用動態綁定變量的方式,此時就需要在打開遊標變量時增加USING子句操作;
    • 語法:在打開遊標變量中使用USING

OPEN 遊標變量名稱 FOR 動態SQL語句 [USING 綁定變量,綁定變量,....]

  • 語法2:利用FETCH一次性保存多條數據到集合類型中

FETCH 動態遊標BULK COLLECT INTO 集合變量 ....;

  • 舉個栗子
    • 示例1:在遊標中使用動態SQL

DECLARE

cur_emp SYS_REFCURSOR ; -- 定義遊標變量

v_emprow emp%ROWTYPE ; -- 定義emp行類型

v_deptno emp.deptno%TYPE := 10 ; -- 定義要查詢僱員的部門編號

BEGIN

OPEN cur_emp FOR 'SELECT * FROM emp WHERE deptno=:dno '

USING v_deptno ;

LOOP

FETCH cur_emp INTO v_emprow ; -- 取得遊標數據

EXIT WHEN cur_emp%NOTFOUND ; -- 如果沒有數據則退出

DBMS_OUTPUT.put_line('僱員姓名:' || v_emprow.ename || ',僱員職位:' || v_emprow.job) ;

END LOOP ;

CLOSE cur_emp ;

END ;

/

本程序定義了一個弱類型的遊標變量,而在程序主體部分使用OPEN....FOR操作要使用的動態SQL,由於此時綁定了一個變量,所以需要使用USING配置此變量內容

  • 示例2:利用FETCH保存查詢結果

DECLARE

cur_emp SYS_REFCURSOR ; -- 定義遊標變量

TYPE emp_index IS TABLE OF emp%ROWTYPE INDEX BY PLS_INTEGER ; -- 定義索引表

v_emprow emp_index ; -- 定義emp行類型

v_deptno emp.deptno%TYPE := 10 ; -- 定義要查詢僱員的部門編號

BEGIN

OPEN cur_emp FOR 'SELECT * FROM emp WHERE deptno=:dno' USING v_deptno ;

FETCH cur_emp BULK COLLECT INTO v_emprow ;

CLOSE cur_emp ;

FOR x IN 1 .. v_emprow.COUNT LOOP

DBMS_OUTPUT.put_line('僱員編號:' || v_emprow(x).empno || ',姓名:' || v_emprow(x).ename || ',職位:' || v_emprow(x).job) ;

END LOOP ;

END ;

/

本程序是將遊標取得數據,通過FETCH BULK COLLECT INTO 語句一次性地保存在了emp_index類型的變量中,而後採用FOR循環輸出遊標中的數據

發佈了201 篇原創文章 · 獲贊 62 · 訪問量 29萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章