PL SQL Select into 異常處理

2021-07-09 02:42:10 字數 1694 閱讀 8551

在使用select into 為變數賦值時,如果變數是集合型別,不會產生異常,而如果是基本型別或記錄型別,則會報異常。

異常產生了怎麼辦?當然是捕獲並處理啦。

對於普通的**塊來說,在**塊的結尾處理就可以了。

但是在迴圈裡面呢?根據異常的傳播,產生異常程式會中止。但如果想要在發生異常後,達到continue的效果,可不能在結尾的exception那裡新增when others then continue;的語句,否則報錯。

要達到在迴圈中,找不到資料就continue,可以在賦值時,no_data_found的情況下作異常處理。即是讓賦值語句包含在begin exception end的結構中。

另外,記錄型別不能被整體判斷為空,可以修改某列的值來判斷,或者使用乙個標誌變數判斷。

下面是乙個小例子,我們一起感受一下。

1

declare

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或者...