PL/SQL遊標---隱式遊標操作例項
阿新 • • 發佈:2018-12-26
遊標是指向這一上下文的區域。 PL/SQL通過控制游標在上下文區域。遊標持有的行(一個或多個)由SQL語句返回。行集合游標保持的被稱為活動集合。
可以命名一個游標,它可以在程式中獲取和處理SQL語句,一次返回的行引用。有兩種型別的遊標:
隱式遊標
顯式遊標
隱式遊標
Oracle在一個SQL語句的執行,當沒有顯式遊標的語句隱式遊標時自動建立。程式設計師無法控制隱式遊標其中的資訊。
每當發出一個DML語句(INSERT,UPDATE和DELETE),隱式遊標與此語句關聯。對於INSERT操作時,游標保持一個需要插入的資料。對於UPDATE和DELETE操作,游標標識會受到影響的行。
在PL/SQL,可以參考最近的隱式遊標的SQL遊標,它有類似%FOUND,%ISOPEN,%NOTFOUND,和%ROWCOUNT屬性。在SQL遊標有額外的屬性,%BULK_ROWCOUNT和%BULK_EXCEPTIONS,設計用於所有語句中使用。下表提供了最常用的屬性的描述:
屬性 | 描述 |
---|---|
%FOUND | 返回TRUE如果一個INSERT,UPDATE或DELETE語句影響了一行或多行或SELECT INTO語句返回一行或多行。否則,它將返回FALSE。 |
%NOTFOUND | 邏輯相反%FOUND。返回TRUE如果一個INSERT,UPDATE或DELETE語句影響沒有行或SELECT INTO語句返回任何行。否則,它將返回FALSE。 |
%ISOPEN | 隱式遊標總是返回FALSE,因為Oracle執行其相關的SQL語句之後自動關閉SQL遊標。 |
%ROWCOUNT | 返回受INSERT,UPDATE影響的行數,或DELETE語句,或者通過一個SELECT INTO語句返回。 |
任何SQL遊標屬性將被訪問,SQL%attribute_name如示例圖所示。
以表emp為操作物件,操作前:
隱式遊標使用例項原始碼視窗截圖:
隱式遊標使用例項原始碼:
-- Created on 2018/3/29 by E.WANG /* Oracle在一個SQL語句的執行,當沒有顯式遊標的語句隱式遊標時自動建立。 程式設計師無法控制隱式遊標其中的資訊。 每當發出一個DML語句(INSERT,UPDATE和DELETE),隱式遊標與此語句關聯。 對於INSERT操作時,游標保持一個需要插入的資料。 對於UPDATE和DELETE操作,游標標識會受到影響的行。 在PL/SQL,可以參考最近的隱式遊標的SQL遊標,它有類似%FOUND,%ISOPEN,%NOTFOUND,和%ROWCOUNT屬性。 在SQL遊標有額外的屬性,%BULK_ROWCOUNT和%BULK_EXCEPTIONS,設計用於所有語句中使用。 */ declare --用於儲存更改的行數 countRows integer; begin --更新表emp給每個員工減一千元 update emp set sal=sal-1000; --使用隱式遊標SQL%NOTFOUND --如果為true說明對元資料沒有變化 if sql%notfound then dbms_output.put_line('no employee update'); --使用隱式遊標SQL%FOUND --如果為true說明對元資料有變化 elsif sql%found then --%rowcount用於儲存受影響的行數 countRows:=sql%rowcount; dbms_output.put_line(countRows ||' employee update'); end if; end;
執行結果截圖: