Oracle异常
一、异常
可以挽回的称作异常,不可以挽回的叫错误。
1.引发除0的异常
declare
v_a number:=100;
v_b number;
begin
v_b:=v_a/0;
dbms_output.put_line(v_b);
end;
2.捕获异常
语法
declare
...声明区...
begin
...编辑区...
exception
when 异常类型 then
异常处理
...
end;
练习:捕捉除数是0的异常
除数是0异常类型:zero_divide
declare
v_a number:=100;
v_b number;
begin
v_b:=v_a/0;
dbms_output.put_line(v_b);
exception
when zero_divide then
dbms_output.put_line('您的除数为0了!默认修改为1');
end;
练习:当主键中插入重复数据时的异常捕获【必会】
begin
insert into dept(deptNo,dname,loc) values(40,'进一部','天堂');
exception
when dup_val_on_index then
dbms_output.put_line('出现重复值,插入部门失败');
end;
练习:自定义异常,当部门编号是负数时引发异常,并进行捕获
declare
my_dept_no_ex exception; /*声明异常对象:my_dept_no_ex*/
pragma exception_init(my_dept_no_ex ,-1); /*初始化异常对象的值,一般异常值是负整数(5位以内)*/
v_deptNo number;/*存储数的部门编号变量声明*/
begin
v_deptNo:=&v_deptNo;/*输入一个部门编号存储在v_deptNo变量中*/
if v_deptNo<0 then /*根据业务判读引发自定义异常的条件*/
raise my_dept_no_ex; /*raise抛出异常对象*/
end if;
insert into dept(deptNo,dname,loc) values(v_deptNo,'忒一部','海洋');
commit;
exception /*异常处理*/
when my_dept_no_ex then /*捕获指定类型的异常对象!*/
dbms_output.put_line('您输入的部门编号不合理,无法注册此部门!');
end;