oracle 异常处理
create unique index uname_idx on myuser(uname);
select * from myuser for update;
--捕获系统内置的异常
declare
v_i number;
v_ename varchar2(20);
begin
--v_i:=1/1; --除数0异常
--insert into myuser values(2,'zhangsan','123456'); --唯一键异常
--v_i:='&empno';
--select ename into v_ename from emp where empno=v_i; --数据未找到
insert into myuser values(2,'lisi','12345'); --其他异常
exception
when sys.standard.ZERO_DIVIDE then
Dbms_Output.put_line('除数不能为0!');
when sys.standard.DUP_VAL_ON_INDEX then
Dbms_Output.put_line('唯一约束异常!');
when sys.standard.NO_DATA_FOUND then
Dbms_Output.put_line('数据未找到!');
when others then
Dbms_Output.put_line('未知错误!');
end;
--捕获抛出的逻辑异常
declare
v_age number;
begin
v_age:='&age';
if(v_age<0 or v_age>130) then
raise_application_error(-88888,'年龄非法!');
end if;
Dbms_Output.put_line('您的年龄:!'||v_age);
exception
when others then
Dbms_Output.put_line('出现异常!');
end;
--捕获自定义异常
declare
v_age number;
ex_myage exception; --自定义异常
pragma exception_init(ex_myage,-20000); --注册自定义异常,编号范围20000-20300 默认前缀都是 ORA-
begin
v_age:='&age';
if(v_age<0 or v_age>130) then
raise_application_error(-20000,'年龄非法!');
end if;
Dbms_Output.put_line('您的年龄:!'||v_age);
exception
when ex_myage then
Dbms_Output.put_line(SQLERRM); --sqlerrm 获取异常信息
end;