NO_DATA_FOUND和%NOTFOUND的區別
SELECT … INTO
語句觸發 NO_DATA_FOUND
;
當一個顯式遊標的WHERE子句未找到時觸發%NOTFOUND
;
當UPDATE
或DELETE
語句的WHERE
子句未找到時,觸發 SQL%NOTFOUND
;
在提取迴圈中要用 %NOTFOUND
或%FOUND
來確定迴圈的退出條件,不要用 NO_DATA_FOUND
.
oracle資料庫儲存過程中NO_DATA_FOUND
不起作用解決
1.首先建立一個表lengzijiantest,表中只有一個欄位f_id
CREATE TABLE LENGZIJIANTEST
(
F_ID NUMBER NOT NULL
)
2.插入一條資料
insert into lengzijiantest values (1)
3.現在表裡面只有一條資料,值為1;
4.寫入如下命令
DECLARE
v_tmp NUMBER := 0;
BEGIN
SELECT f_id
INTO v_tmp
FROM lengzijiantest
WHERE f_id = 2;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
DBMS_OUTPUT.put_line ('找不到資料');
END;
5.因為資料庫中只有1的資料,該條語句會列印出“找不到資料”;如果把sql寫成如下方式,則不會列印“找不到資料”
DECLARE
v_tmp NUMBER := 0;
BEGIN
SELECT min(f_id)
INTO v_tmp
FROM lengzijiantest
WHERE f_id = 2;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
DBMS_OUTPUT.put_line ('找不到資料');
END;
6.具體原因是由於在sql中使用了聚合函式,當使用聚合函式時,NO_DATA_FOUND
是不起作用的,在這一點上也吃了小虧,不過問題不大,在此記錄下問題。
相關文章
- ../和./和/的區別
- LinkedList和ArrayList的區別、Vector和ArrayList的區別
- http和https的區別/get和post的區別HTTP
- oracle資料庫%notfound的理解Oracle資料庫
- ||和??的區別
- /*和/**的區別
- jquery $(this) 和this的區別jQuery
- JQuery this和$(this)的區別jQuery
- T和?的區別
- makefile =和:=的區別
- ++a和a++的區別
- ./ 和sh 的區別
- 和區別
- springmvc和springboot的區別SpringMVCSpring Boot
- SDK和API的區別?API
- ArrayList和LinkedList的區別?
- button和submit的區別MIT
- MTV和MVC的區別MVC
- hadoop和spark的區別HadoopSpark
- rpop 和 brpop的區別
- WebApi和MVC的區別WebAPIMVC
- GET和POST的區別?
- ArrayList和LinkedList的區別
- WBS和TASK的區別?
- JavaScript中for in 和for of的區別JavaScript
- innerText 和 textContent 的區別?
- var 和 let 的區別
- @JsonProperty和@JsonAlias的區別JSON
- POST 和 GET 的區別
- sass和less的區別
- MySQL和Oracle的區別MySqlOracle
- sizeThatFits 和 sizeToFit的區別
- GitHub和GitLab的區別GithubGitlab
- Js中for in 和for of的區別JS
- isKindOfClass和isMemberOfClass的區別
- innerText和textContent的區別
- cookie和session的區別CookieSession
- require 和 import 的區別?UIImport