SQL%FOUND,SQL%NOTFOUND,SQL%ROWCOUNT

在執行DML(insert,update,delete)語句時,可以用到以下三個隱式遊標(遊標是維護查詢結果的內存中的一個區域,運行DML時打開,完成時關閉,用sql%isopen檢查是否打開):

sql%found (布爾類型,默認值爲null)

sql%notfound(布爾類型,默認值爲null)

sql%rowcount(數值類型默認值爲0)

sql%isopen(布爾類型)

當執行一條DML語句後,DML語句的結果保存在四個遊標屬性中,這些屬性用於控制程序流程或者瞭解程序的狀態。當運行DML語句時,PL/SQL打開一個內建遊標並處理結果,遊標是維護查詢結果的內存中的一個區域,遊標在運行DML語句時打開,完成後關閉。隱式遊標只使用SQL%FOUND,SQL%NOTFOUND,SQL%ROWCOUNT三個屬性.SQL%FOUND,SQL%NOTFOUND是布爾值,SQL%ROWCOUNT是整數值。
  SQL%FOUND和SQL%NOTFOUND
  在執行任何DML語句前SQL%FOUND和SQL%NOTFOUND的值都是NULL,在執行DML語句後,SQL%FOUND的屬性值將是:
  . TRUE :INSERT
  . TRUE :DELETE和UPDATE,至少有一行被DELETE或UPDATE.
  . TRUE :SELECT INTO至少返回一行
  當SQL%FOUND爲TRUE時,SQL%NOTFOUND爲FALSE。
  SQL%ROWCOUNT
  在執行任何DML語句之前,SQL%ROWCOUNT的值都是NULL,對於SELECT INTO語句,如果執行成功,SQL%ROWCOUNT的值爲1,如果沒有成功或者沒有操作(如update、insert、delete爲0條),SQL%ROWCOUNT的值爲0.
  SQL%ISOPEN
  SQL%ISOPEN是一個布爾值,如果遊標打開,則爲TRUE, 如果遊標關閉,則爲FALSE.對於隱式遊標而言SQL%ISOPEN總是FALSE,這是因爲隱式遊標在DML語句執行時打開,結束時就立即關閉。

 

 

no_data_found 與 sql%notfound 以及 sql%rowcount 的區別:

 

NO_DATA_FOUND:該異常可以在兩種不同的情況下出現:第一種:當SELECT。。。。INTO語的       WHERE子句 沒匹配任何數據行時;第二種:試圖引用尚未賦值的PL/SQL index-by表元素時。

      SQL%NOTFOUND:是隱匿遊標的屬性,當沒有可檢索的數據時,該屬性爲:TRUE;常作爲檢索循環退出的條件。

                                     若某UPDATE或DELETE語句的WHERE子句不匹配任何數據行,該屬性爲:TRUE,但不併不出現NO_DATA_FOUND異常.

      SQL%ROWCOUNT:該數字屬性返回了到目前爲止,遊標所檢索數據庫行的個數。

發佈了54 篇原創文章 · 獲贊 0 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章