no data found的解決方法

2021-06-22 03:27:16 字數 2193 閱讀 6360

一 ,no_data_found異常的觸發

oracle程式設計中 select into 語句沒有記錄時,會觸發no_data_found異常

二,no_data_found異常解決方法

如果在乙個程式塊中,發生異常程式就會停止執行,報出異常。如果我們不想讓程式因為這個no_data_found異常而停止執行,可以用如下方法

1)用子塊來處理

把會報出no_data_found異常的select into語句放到乙個子塊中

declare

sal1 number;

sal2 number;

sal3 number;

begin

select sal into sal1 from emp1 where empno=7369;

begin

select sal into sal2 from emp1 where empno=1;

exception

/*  when no_data_found then

sal2:=2500;*/

when others then

dbms_output.put_line(sqlcode||':'||sqlerrm);

end;

select sal into sal3 from emp1 where empno=7499;

dbms_output.put_line('工號:'||7369||'——'||'工資:'||sal1);

dbms_output.put_line('工號:'||1||'--'||'工資;'||sal2);

dbms_output.put_line('工號:'||7499||'--'||'工資:'||sal3); 

exception

when others then

dbms_output.put_line(sqlcode||':'||sqlerrm);

end;

如上面這一段**中第二個select into 語句執行時會報no_data_found異常,我們把他放到乙個子塊裡面,字塊報異常以後程式還可以繼續執行,不會影響其他部分。

2)用nvl函式結合聚合函式來處理

那麼還是會報no_data_found異常,至於原因下文會詳細解釋。

3)在select inot 之前先作一下判斷

select count(1) into tem  from emp where empno=1;

如果等於1的時候 select into語句可以正常執行,等於0 會報no_data_found錯,大於1會報too_many_rows

4)用事務自治

oracle自治事務相關知識以後再作了解。

三,no_data_found異常同聚合函式

注意 語句有使用聚合函式時一般不會報no_data_found錯(但也有例外,同group by一起使用時),

原因如下:

這裡就涉及到 有一條記錄但是記錄是空記錄 和沒有一條記錄 的問題了。 首先弄清楚no data found異常是在找不到一條記錄的時候報的異常,但是在找到一條空記錄的時候是不會報這個異常的。 用集合函式之所以不會報錯原因是: 用集合函式的時候,當引數沒有賦值時,函式會預設賦乙個空值來進行計算,返回的結果也是乙個空值(不是沒有值)。 而to_char、substr這些函式就不會當引數沒有賦值時預設賦空值,也就沒有結果返回。 所以區別就是乙個有記錄返回,但是個空記錄,而乙個是沒有記錄返回。 其實你要看清楚空記錄和沒有記錄的區別可以執行如下的程式看返回結果的差別就懂了。 open outcursor for select max(t.time) from dept t where t.id>'10'; 比較 open outcursor for select t.time from dept t where t.id>'10'; 再比較 open outcursor for select to_char(t.time,'yyyy-mm-dd') from dept t where t.id>'10';

但是也有例外,就是使用了聚合函式,還是報了no_data_found

select sum(sal) from into sal1 emp1 where empno=1 group by empno;(注意group by的使用)

下面的連線是我搜到的關於group by使用報no_data_found錯誤的解釋(個人感覺說的有點問題,僅供參考!)

本文出自 「技術」 部落格,請務必保留此出處

ADB server didn t ACK解決方法

1 首先通過cmd啟動adb服務。這個時候會提示啟動失敗。adb start server 服務啟動失敗的原因有很多,但一般是埠繫結失敗。我們來檢視一下埠繫結資訊。如圖所示,真的是埠繫結出了問題。adb nodaemon server 3 我們來看看哪個服務占用了這個埠。這裡面有2個程序占用了這個埠...

NoSuchMethodError 解決方法

j a.lang.nosuchmethoderror,想必 j a的開發者都遇到過這個報錯吧,這個錯誤基本上都是由jvm 的 全網負責委託機制 全網負責委託機制是啥?引發的問題,本人在此奉上三種解決方案 步驟一 全域性搜尋該方法是否存在,目前idea可以支援該操作,包括source包均能搜到 如果搜...

make menuconfig出錯的解決方案

ubuntu16.04 64位編譯配置核心時,執行命令 make menuconfig出現如下錯誤 make 1 scripts kconfig lxdialog checklist.o error 1 makefile 417 recipe for target menuconfig failed...