PL/SQL遊標描述

遊標示意圖:

 

遊標的類型分爲:隱式遊標,顯式遊標,REF遊標。

遊標的屬性:%FOUND,%NOTFOUND,%ROWCOUNT,%ISOPEN

常見的異常:NO_DATA_FOUND,TOO_MANY_ROWS,其他的爲others

隱式遊標:在使用DML語句時自動創建,自動打開、關閉遊標,其名爲SQL;

我們可以使用for循環來對遊標進行隱式處理。For循環中變量v_test不需要在聲明部分聲明,它由PLSQL編譯器進行隱式的聲明。並且for循環開始的時候,遊標也就隱式地打開了。

 

顯式遊標:在PL/SQL語句中定義的遊標稱爲顯式遊標。顯式遊標處理需如下步驟:

    a) cursor 遊標名 is 查詢語句(申明遊標);

    b) open 遊標名(打開遊標);

    c) fetch 遊標名 in--遊標的當前記錄已被隱式地提取給變量 v_testto 變量名(提取行);

    d) close 遊標名(關閉遊標)。

 

帶參數的顯式遊標:遊標的參數,只能接受傳遞的值,而不能返回值,參數只定義數據類型,沒有大小。可以給參數賦一個缺省值

 

 

 

REF遊標:用於處理運行時動態執行的SQL語句。創建REF遊標需要以下兩個步驟:

              a) 申明REF遊標類型;

              b) 申明REF遊標類型的變量。

 

遊標修改和刪除操作:

遊標修改和刪除操作是指在遊標定位下,修改或刪除表中指定的數據行。這時,要求遊標查詢語句中必須使用for update選項。

爲了對正在處理(查詢)的行不被另外的用戶改動,oracle提供一個for update子句來對所有選擇的行進行鎖定,該需求迫使oracle鎖定遊標結果集合的行,可以防止其他事務處理更新或刪除相同的行,直到您的事務處理提交或回退爲止。

語法:

Select…from..for update [of column[,column]…][nowait]

如果另一個會話已對活動集中行加了鎖,那麼select for update操作一直等待到其它的會話釋放這些鎖後才繼續自己的操作,對於這種情況,當加上nowait子句時,如果這些行真的被另一個會話鎖定,則open立即返回並給出:ora-0054:resource busy and acquire with nowait specified。如果使用for update聲明遊標,則可在delete和update語句中使用where current of cursor_name 子句,修改或刪除遊標結果集合當前行對應的數據表中數據行。

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