/*
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 在...