用SQL%ROWCOUNT返回SQL語句的影響數量
阿新 • • 發佈:2019-02-08
早前在做一個簡訊介面時,客戶端通過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語句的遊標屬性