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
是不起作用的,在這一點上也吃了小虧,不過問題不大,在此記錄下問題。
相關文章
- sql%notfound、sql%rowcount和returnSQL
- ../和./和/的區別
- 和 的區別
- as 和 with的區別
- ||和??的區別
- /*和/**的區別
- LinkedList和ArrayList的區別、Vector和ArrayList的區別
- http和https的區別/get和post的區別HTTP
- oracle資料庫%notfound的理解Oracle資料庫
- ./ 和sh 的區別
- JQuery this和$(this)的區別jQuery
- jquery $(this) 和this的區別jQuery
- T和?的區別
- ++a和a++的區別
- makefile =和:=的區別
- Mybatis中#{}和${}傳參的區別及#和$的區別小結MyBatis
- 和區別
- SQL%FOUND,SQL%NOTFOUND,SQL%ROWCOUNTSQL
- MYSQL和SQL的區別MySql
- varchar和char的區別
- &self 和 self 的區別
- var和public的區別
- filter和interceptor的區別Filter
- useEffect 和 useLayoutEffect 的區別
- SDK和API的區別?API
- var 和 let 的區別
- WebApi和MVC的區別WebAPIMVC
- service和systemctl的區別
- GET和POST的區別?
- GET和POST的區別
- button和submit的區別MIT
- GET 和 POST 的區別
- 【Java】equals 和 == 的區別Java
- django和flask的區別DjangoFlask
- promise 和 Observable 的區別Promise
- sass和less的區別
- POST 和 GET 的區別
- cookie和session的區別CookieSession