oracle 預定義異常

2021-07-24 12:28:05 字數 4364 閱讀 4568

/*

1,access_into_null 沒有初始化物件異常

*/ create type emp_type as object (

id number(10), –物件(建立)

name varchar2(50)

); declare

emp emp_type:=emp_type(1,」);

begin

emp.name := 『王瑤』;

exception

when access_into_null then

dbms_output.put_line(『沒有初始化emp物件』);

end;

declare –記錄(宣告)

type emp_type is record (

id number(10),

name varchar2(50)

); emp1 emp_type;

begin

emp1.name := 『王瑤』;

exception

when access_into_null then

dbms_output.put_line(『沒有初始化emp1物件』);

end;

/*2.case_not_fount case語句時,缺少符合的條件,並且沒有else語句

*/declare

v_sal emp.sal%type;

begin

select sal into v_sal from emp where empno = &no;

case

when v_sal <1000 then

dbms_output.put_line(『sal《1000』);

when v_sal <2000 then

dbms_output.put_line(『sal《2000』);

when v_sal <3000 then

dbms_output.put_line(『sal《3000』);

when v_sal <4000 then

dbms_output.put_line(『sal《4000』);

end case;

exception

when case_not_found then

dbms_output.put_line(『case中沒有相關資料』);

end;

/* 3.collection_is_null 沒有初始化集合(巢狀表,變長陣列)

*/declare

type v_varray_type is varray(100) of varchar2(10);

name v_varray_type;

begin

name(1) := 『wang』;

name(2) := 『ba』;

name(3) := 『tao』;

exception

when collection_is_null then

dbms_output.put_line(『集合沒有初始化』);

end;

/*4.cursor_already_open 再次開啟已經開啟的游標

*/declare

cursor v_cursor is select * from emp;

begin

—open v_cursor;

for i in v_cursor loop

dbms_output.put_line(i.empname || 』 』 || i.sal);

end loop;

exception

when cursor_already_open then

dbms_output.put_line(『游標已經開啟…………』);

end;

/* 5.dup_val_on_index 在唯一索引列上插入重複值

*/begin

update emp set empno = &new_name where empno = &old_name;

exception

when dup_val_on_index then

dbms_output.put_line(『唯一索引違規』);

end;

/*6.invalid_cursor 操作不合法的游標-處理,關閉未打卡的游標,

*/declare

cursor v_cursor is select * from emp;

v_emp emp%rowtype;

begin

loop

fetch v_cursor into v_emp;

exit when v_cursor%notfound;

dbms_output.put_line(v_emp.empname);

end loop;

close v_cursor;

exception

when invalid_cursor then

dbms_output.put_line(『操作無效的游標』);

end;

/*7.invalid_number 不能將有效的字元轉化為數字

*/ begin

update emp set sal = sal + 『1oo』;

exception

when invalid_number then

dbms_output.put_line(『被操作的數字格式又問提…..』);

end;

/*8.no_data_found

9.too_many_rows

*//*

10.zero_divide 除數分母為0

*/declare

v_1 int:=100;

v_2 int :=0;

v_3 int;

begin

v_3 := v_1 / v_2;

exception

when zero_divide then

dbms_output.put_line(『除數分母為0…..』);

end;

/*11. subscript_beyond_count 巢狀表或變長陣列下標超階

*/declare

type v_varray_type is varray(100) of varchar2(50);

v_varray v_varray_type := v_varray_type(」,」,」);

begin

dbms_output.put_line(v_varray(4));

exception

when subscript_beyond_count then

dbms_output.put_line(『陣列下標超界…..』);

end;

/*12. subscript_outside_limit 巢狀表或變長陣列下標為負值時

*/declare

type v_varray_type is varray(100) of varchar2(50);

v_varray v_varray_type := v_varray_type(」,」,」);

begin

dbms_output.put_line(v_varray(-1));

exception

when subscript_outside_limit then

dbms_output.put_line(『陣列下標不合法(超出限制)…..』);

end;

/*13. value_error 變數長度不夠

*/declare

v_char varchar(1) ;

begin

select empname into v_char from emp where empno = 5;

dbms_output.put_line(v_char);

exception

when value_error then

dbms_output.put_line(『變數長度不夠…..』);

end;

ORACLE預定義異常

start 命名的系統異常 產生原因 access into null 未定義物件 case not found case 中若未包含相應的 when 並且沒有設定 else 時 collection is null 集合元素未初始化 curser already open 游標已經開啟 dup v...

Oracle預定義異常

oracle預定義異常21個 序號系統異常 產生原因 1access into null 未定義物件 2case not found case中若未包含相應的when,並且沒有設定else時 3collect ion is null 集合元素未初始化 4curser already open 游標已...

oracle 非預定義異常

oracle中,異常有預定義異常,非預定義異常,使用者自定義異常。預定義異常有異常 異常名稱。非預定義異常,有錯誤 使用者必須事先知道異常 沒有名稱。必須使用者自己定義。非預定義異常 1 在定義部分,定義異常名稱。異常名稱 exception 如 fk exception exception 2 在...