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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle中的sql%rowcount在瀚高資料庫中的相容方案OracleSQL資料庫
- 【SQL】17 SQL 檢視(Views)、SQL Date 函式、SQL NULL 值、SQLView函式Null
- 【SQL】19 SQL函式SQL函式
- SQL注射/SQL Injection漏洞SQL
- SQL------SQL效能分析SQL
- 【SQL】13 SQL 別名、SQL 連線(JOIN)、SQL INNER JOIN 關鍵字、SQL LEFT JOIN 關鍵字、SQL RIGHT JOIN 關鍵字、SQL FULL OUTER JSQL
- 【SQL】9 SQL INSERT INTO 語句SQL
- 【SQL】10 SQL UPDATE 語句SQL
- 【SQL】11 SQL DELETE 語句SQLdelete
- 【SQL】Oracle 19c SQL隔離詳解(SQL Quarantine)SQLOracle
- SQLSQL
- NO_DATA_FOUND和%NOTFOUND的區別
- SQL 已死,但 SQL 將永存!SQL
- False SQL Injection and Advanced Blind SQL InjectionFalseSQL
- 【SQL】SQL中if條件的使用SQL
- 【SQL】Oracle SQL處理的流程SQLOracle
- 【SQL】Oracle SQL共享池檢查SQLOracle
- SQL Access Advisor、SQL Tuning Advisor 測試SQL
- SQL語法之SQL 萬用字元SQL字元
- SQL奇遇記:解鎖 SQL 的秘密SQL
- HighgoDB查詢慢SQL和阻塞SQLGoSQL
- hirolau/SQL:金融領域的SQL技巧SQL
- sql devloper 用法的和SQL 編寫SQLdev
- 使用sql tuning advisor最佳化sqlSQL
- Oracle SQL精妙SQL語句講解OracleSQL
- Oracle SQL優化之sql tuning advisorOracleSQL優化
- sql merge intoSQL
- sql注入SQL
- SQL 注入SQL
- Heroku sqlSQL
- SQL教程SQL
- sql serverSQLServer
- [Mysql]SQLMySql
- SQL ThinkingSQLThinking
- SQL TraceSQL
- SQL groupingSQL
- Spark SQL:4.對Spark SQL的理解SparkSQL
- .sql檔案匯入到sql server中SQLServer
- SQL Server一次SQL調優案例SQLServer