SQL%FOUND,SQL%NOTFOUND,SQL%ROWCOUNT
PL/SQL 會為程式中執行的每一條UPDATE,DELETE,INSERT 語句使用一個隱式遊標。隱式遊標有SQL%FOUND,SQL%NOTFOUND,SQL%ROWCOUNT三個屬性,這些屬性用於控制程式流程或者瞭解程式的狀態。
當執行DML語句時,PL/SQL開啟一個內建遊標並處理結果,遊標是維護查詢結果的記憶體中的一個區域,遊標在執行DML語句時開啟,完成後關閉。隱式遊標只使用SQL%FOUND,SQL%NOTFOUND,SQL%ROWCOUNT三個屬性。SQL%FOUND,SQL%NOTFOUND是布林值,SQL%ROWCOUNT是整數值。
1. SQL%FOUND和SQL%NOTFOUND
在執行任何DML語句前SQL%FOUND和SQL%NOTFOUND的值都是NULL,在執行DML語句後,SQL%FOUND的屬性值將是:
a. TRUE :INSERT
b. TRUE :DELETE和UPDATE,至少有一行被DELETE或UPDATE.
c. TRUE :SELECT INTO至少返回一行
當SQL%FOUND為TRUE時,SQL%NOTFOUND為FALSE。
2. SQL%ROWCOUNT
在執行任何DML語句之前,SQL%ROWCOUNT的值都是NULL,對於SELECT INTO語句,如果執行成功,SQL%ROWCOUNT的值為1,如果沒有成功,SQL%ROWCOUNT的值為0,同時產生一個異常NO_DATA_FOUND.
3. SQL%ISOPEN
SQL%ISOPEN是一個布林值,如果遊標開啟,則為TRUE, 如果遊標關閉,則為FALSE.對於隱式遊標而言SQL%ISOPEN總是FALSE,這是因為隱式遊標在DML語句執行時開啟,結束時就立即關閉。
例子:
Name Null? Type
----------------------------------------------------------------
ID NOT NULL NUMBER(9)
SALARY NUMBER(7,2)
SUBJECT_ID NOT NULL NUMBER(3)
SUBJECT_DESCRIPTION VARCHAR2(2)
BEGIN
UPDATE teacher
SET salary = salary * 1.05
WHERE subject_id IN (101, 102, 103);
IF SQL%NOTFOUND = TRUE THEN
dbms_output.put_line(TO_CHAR(SQL%ROWCOUNT));
END IF;
END;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22392018/viewspace-707597/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- sql%notfound、sql%rowcount和returnSQL
- 隱式遊標(implicit cursor)_sql%found_rowcount小操作SQL
- Oracle中的sql%rowcountOracleSQL
- SQL Server中@@ROWCOUNT的用法SQLServer
- SQL%ROWCOUNT的簡要說明SQL
- oracle中的sql%rowcount(R2)OracleSQL
- NO_DATA_FOUND和%NOTFOUND的區別
- Oracle中的sql%rowcount在瀚高資料庫中的相容方案OracleSQL資料庫
- SQL Server中利用SET ROWCOUNT來高效能地進行分頁SQLServer
- 【meil】MS SQL用ROWCOUNT解決TOP子句不支援變數的問題SQL變數
- 【SQL】Oracle SQL monitorSQLOracle
- SQL in ORACLE and SQL ServerSQLOracleServer
- 【SQL】17 SQL 檢視(Views)、SQL Date 函式、SQL NULL 值、SQLView函式Null
- SQL注射/SQL Injection漏洞SQL
- 【SQL】19 SQL函式SQL函式
- SQL&PL/SQL (轉)SQL
- 【SQL Profile】coe_xfr_sql_profile.sql內容SQL
- SQL Server 管理常用的SQL和T-SQLSQLServer
- 避免PL/SQL Case Not Found錯誤三方法SQL
- T-SQL、Jet SQL、PL-SQL 的含義SQL
- 【SQL】13 SQL 別名、SQL 連線(JOIN)、SQL INNER JOIN 關鍵字、SQL LEFT JOIN 關鍵字、SQL RIGHT JOIN 關鍵字、SQL FULL OUTER JSQL
- 【SQL】10 SQL UPDATE 語句SQL
- 【SQL】11 SQL DELETE 語句SQLdelete
- SQL SERVER中SQL優化SQLServer優化
- (17)sql注入與sql modeSQL
- SQL Deverlop連線SQL ServerSQLdevServer
- 【SQL】SQL資料型別SQL資料型別
- 使用sql生成sql指令碼SQL指令碼
- SQL Server 之 SQL 注入篇SQLServer
- 【SQL】SQL
- sqlSQL
- 【SQL】Oracle 19c SQL隔離詳解(SQL Quarantine)SQLOracle
- SQL 已死,但 SQL 將永存!SQL
- 【SQL】Oracle SQL處理的流程SQLOracle
- 【SQL】Oracle SQL共享池檢查SQLOracle
- 【SQL】9 SQL INSERT INTO 語句SQL
- 【SQL優化】SQL優化工具SQL優化
- sql tuning task和sql profileSQL