1. 程式人生 > >Oracle學習筆記第十二天-02

Oracle學習筆記第十二天-02

Oracle學習筆記第十二天-02

遊標

隱式遊標

概念:Oracle自動在後臺使用的遊標,使用者不參與任何操作,所以對使用者是“透明”(隱藏)的。

特徵:

  1. 不能手動開啟、提取、關閉
  2. 使用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遊標型別
  1. 與其它複合型別一樣,必須要定義自己的新的遊標型別(要先定義資料的結構)以後,再用新的遊標型別定義遊標變數才可以使用。
  2. 表%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;