Oracle學習筆記第十二天-02
阿新 • • 發佈:2018-12-23
Oracle學習筆記第十二天-02
遊標
隱式遊標
概念:Oracle自動在後臺使用的遊標,使用者不參與任何操作,所以對使用者是“透明”(隱藏)的。
特徵:
- 不能手動開啟、提取、關閉
- 使用SELECT…INTO…語句時,Oracle會自動建立、開啟、取值(Fetch)、Close。
使用範圍:
通過檢查隱式遊標屬性,可以獲取最近執行的select單行語句或者其它DML語句資訊。
執行dml操作時會自動定義、開啟名叫SQL的隱式遊標,並且dml語句執完結束後,隱式遊標自動關閉。
set serveroutput on; declare begin --執行dml操作時會自動定義、開啟名叫SQL的隱式遊標 --並且dml語句執完結束後,隱式遊標自動關閉 update emp set sal = sal + 100 where deptno = 10; if sql%isopen then dbms_output.put_line('遊標處於開啟狀態'); else dbms_output.put_line('遊標處於關閉狀態'); end if; if sql%found then dbms_output.put_line('更新成功,更新的行數為:'||sql%rowcount); else dbms_output.put_line('更新失敗'); end if; end; /
REF遊標(引用遊標)(動態遊標)
-- 語法
-- 定義PEF遊標型別
type 遊標型別 is ref cursor return 記錄型別
-- 定義該型別的變數
遊標變數 自定義REF遊標型別
- 與其它複合型別一樣,必須要定義自己的新的遊標型別(要先定義資料的結構)以後,再用新的遊標型別定義遊標變數才可以使用。
- 表%rowtype 指出:返回的資料有幾個列以及各列資料型別。
--演示:遊標變數使用步驟 案例:輸出所有員工姓名 DECLARE --1. 定義引用遊標型別 TYPE emp_cur_type IS REF CURSOR RETURN emp%ROWTYPE; --2. 定義遊標變數 emp_cur emp_cur_type; --3. 定義變數儲存一行記錄 emp_row emp%ROWTYPE; BEGIN --4. 開啟遊標 OPEN emp_curFOR SELECT * FROM emp ORDER BY sal DESC; --5. 獲取遊標的一行資料。 FETCH emp_curINTO emp_row; -- 迴圈獲取資料 WHILE emp_cur%FOUND LOOP dbms_output.put_line(emp_row.ename||'-->'||emp_row.sal); FETCH emp_curINTO emp_row; END LOOP; END;