27.PLSQL中的隱式遊標

一、什麼是遊標

       簡單來理解,在PLSQL中,無論我們查詢數據庫還是向數據庫插入、修改和刪除的DML操作,凡是對數據庫產生了影響,執行的sql語句都會返回一個由受影響的數據行組成的結果集,而遊標就是管理這個結果集的對象。

        Oracle中游標分爲兩種——隱式遊標和顯式遊標,每個sql語句返回的結果集都會默認受‘SQL’這個隱式遊標的管理;而顯式遊標是我們自定義的遊標,用來管理特定的SQL語句返回的結果集。

二、通過隱式遊標獲取查詢到的行數

       假設有下面的emp表:


        如下面的代碼,我們在PLSQL的執行塊中選中sal大於等於3000的僱員,並打印出共有多少人,就可以通過隱式遊標SQL的ROWCOUNT屬性來實現。

declare
 type emp_varray is varray(20)of emp%rowtype;
 v_emps emp_varray;
begin
 select * bulk collect intov_emps from emp where sal>=3000;
 dbms_output.put_line('sal不小於3000的人數是:'||SQL%rowcount);
end;
/

結果如下:


       %ROWOUNT是隱形遊標的一個屬性,除此之外,它還具有以下屬性:

序號

屬性

描述

1

%FOUND

當執行sql語句返回的結果集不爲空時該值爲True

2

%ISOPEN

判斷遊標是否打開,隱形遊標中改值恆爲False,表示已經打開。

3

%NOTFOUND

和%Found的判斷標準正好相反。

4

%ROWCOUNT

返回的數據集的行數。

 

三、DML語句中使用隱形遊標

3.1 Insert語句中使用隱形遊標

declare
 typeemp_varray is varray(20) of emp%rowtype;
 v_emps emp_varray;
begin
 insert into empvalues(8888,'hyman','clerk',7698,sysdate,3000,200,20);
 ifSQL%found then
   dbms_output.put_line('插入的人數是:'||SQL%rowcount);
 endif;
end;
/

3.2 update 語句中使用隱形遊標

declare
 typeemp_varray is varray(20) of emp%rowtype;
 v_emps emp_varray;
begin
 update emp set sal=10000 where empno=8888;
 ifSQL%found then
   dbms_output.put_line('修改的人數是:'||SQL%rowcount);
 endif;
end;
/

3.3 delete 語句中使用隱形遊標

declare
 typeemp_varray is varray(20) of emp%rowtype;
 v_emps emp_varray;
begin
 delete from emp where empno=8888;
 ifSQL%found then
   dbms_output.put_line('刪除的人數是:'||SQL%rowcount);
 endif;
end;
/




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章