在使用select into 為變數賦值時,如果變數是集合型別,不會產生異常,而如果是基本型別或記錄型別,則會報異常。
異常產生了怎麼辦?當然是捕獲並處理啦。
對於普通的**塊來說,在**塊的結尾處理就可以了。
但是在迴圈裡面呢?根據異常的傳播,產生異常程式會中止。但如果想要在發生異常後,達到continue的效果,可不能在結尾的exception那裡新增when others then continue;的語句,否則報錯。
要達到在迴圈中,找不到資料就continue,可以在賦值時,no_data_found的情況下作異常處理。即是讓賦值語句包含在begin exception end的結構中。
另外,記錄型別不能被整體判斷為空,可以修改某列的值來判斷,或者使用乙個標誌變數判斷。
下面是乙個小例子,我們一起感受一下。
1declare
2 v_test2 studentrecord;--
遍歷游標
3 v_test3 studentrecord;--
每次取出的記錄
4cursor c_test is
5select*6
from
student_head h
7where h.student_key in (3285, 3286, 3287, 3288);8
flag boolean;
9begin
10open
c_test;
11loop
12fetch c_test into
v_test2;
13exit
when c_test%
notfound;
14 flag :=
true;
15begin
16select*17
into
v_test3
18from
student_head
19where student_key =
v_test2.student_key
20and student_status <>
'cnx';
21exception
22when no_data_found then
--select into 沒有資料時,如果是集合型別不會產生異常,記錄型別報異常
23 flag :=
false;
24end;25
/*if v_test3 is null
*/--
記錄型別不能整體判斷為空
26if flag then
--判斷是否有找到資料
27 dbms_output.put_line(v_test3.student_key ||''
||v_test3.student_no);
28endif;
29end
loop;
30close
c_test;
31/*
exception
32when no_data_found then continue ;
*/--
不能在異常中使用continue
33--
如果在此處理異常,會導致迴圈中止,要達到continue的效果,可在每次賦值進行異常處理
34end;
mysql 丟擲異常sql mysql 異常處理
該文章內容通過網路搜尋組合,mysql 異常,可以自定義異常,再應用。也可使用系統預設的異常,捕獲應用。一 異常定義 declare condition name condition for condition type condition name引數表示異常的名稱 condition type引...
mysql 多異常 處理 MYSQL效能異常處理
通過information schema.processlist表中的連線資訊生成需要處理掉的mysql連線的語句臨時檔案,然後執行臨時檔案中生成的指令 mysql select concat kill id,from information schema.processlist where use...
spark on yarn 模式在hdp異常處理
其中乙個異常關鍵字 bad substitution 然後在stackoverflow發現相同提問,文中提到是因為沒有制定hdp版本,我才明白spark bin hadoop,編譯的是原生態的hadoop。英文應該都懂,我就不用翻譯了。正常情況遇見問題,不應該直接在網上找答案,診斷流程 從log或者...