1. 程式人生 > >用SQL%ROWCOUNT返回SQL語句的影響數量

用SQL%ROWCOUNT返回SQL語句的影響數量

早前在做一個簡訊介面時,客戶端通過webservice介面傳送簡訊請求,我用一個PLSQL儲存過程接收後進行一些處理,然後返回一個處理結果,其中有一段是這樣的:


大致意思是把簡訊申請中號碼有效的部分進行傳送,然後返回總共成功了多少條。當查詢的基表資料量比較大,或者SQL的處理邏輯本身比較慢的時候,這種做法效率就顯得太低了。比如另外一個更常見的場景是根據輸入文字模糊查詢企業清單,同時返回結果數:


一樣的SQL執行了2遍,而且每遍執行的時間比較長,這種情況下可以用到SQL%ROWCOUNT屬性。

SQL%ROWCOUNT是一個遊標屬性,而SQL中的DML操作實際上是一種隱式的遊標操作,在做INSERT,UPDATE,DELETE,MERGE以及SELECT INTO操作時,Oracle會開啟一個始終指向最近執行的SQL語句的隱式遊標,這個遊標有3個常用的屬性:

(1)SQL%FOUND,有記錄被修改,返回TRUE

(2)SQL%NOTFOUND,沒有記錄被修改,返回TRUE

(3)SQL%ROWCOUNT,語句操作的記錄數

那麼上述的例子中取數量的語句,就可以改為簡單的賦值語句了:


看幾個例子:

1.INSERT語句的遊標屬性,指向最近執行的一條SQL


2.UPDATE語句的遊標屬性


3.MERGE語句的遊標屬性,返回的數量是指INSERT和UPDATE的總數


4.DELETE語句的遊標屬性


5.SELECT INTO語句的遊標屬性