Oracle笔记 七、PL/SQL 异常处理
--异常处理
declaresNum number := 0;
beginsNum := 5 / sNum;
dbms_output.put_line(sNum);
exception when others then
dbms_output.put_line('is Error!');end;--自定义异常
declare ex_custom_invaild_age exception; --自定义的异常myerr age int;beginage := &请输入年龄;
if (age < 0) then
raise ex_custom_invaild_age; --引发自定义异常
else dbms_output.put_line('年龄是:' || age); end if;
exception when ex_custom_invaild_age then
dbms_output.put_line('非法的年龄');end;--引发应用程序异常
--raise_application_error(异常编号,说明);
declare age int;beginage := &请输入年龄;
if (age < 0) then
raise_application_error(-20500, '年龄不能为负数'); else dbms_output.put_line('年龄是:' || age);end if;
end;--非预定义异常
declare ex_custom_error exception;pragma exception_init(ex_custom_error, -1); --把一个编号和一个自定义异常关联,
--相当于把-1编号的异常命名为ex_custom_error,这样就可以捕获这种异常
begin insert into dept values(10, 'aaa', 'bbb');
exception when ex_custom_error then
dbms_output.put_line('部门编号已经存在');end;--异常处理
declarevSal emp.sal%type;
beginselect sal into vSal from emp;
exceptionwhen too_many_rows then
dbms_output.put_line('多条数据');when others then
dbms_output.put_line('Error');end;declarevSal emp.sal%type;
beginselect sal into vSal from emp where empno = 1;
exceptionwhen no_data_found then
dbms_output.put_line('没有数据');when others then
dbms_output.put_line('Error');end;--异常日志处理
create table errorLog (
id number primary key,
errCode number,
errMsg varchar2(1024),
errDate date);
--创建序列,从1开始,每次加1
create sequence seq_errorLog_id start with 1 increment by 1;
declarevDeptno dept.deptno%type := 10;
vErrCode number;
vErrMsg varchar2(1024);
begindelete from dept where deptno = vDeptno;
commit; exceptionwhen others then
rollback; vErrCode := SQLCODE;vErrMsg := SQLERRM;
insert into errorLog values(seq_errorLog_id.nextval, vErrCode, vErrMsg, sysdate);
commit;end;select * from errorLog;
出处:
blog:http://blog.csdn.net/IBM_hoojo
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
版权所有,转载请注明出处 本文出自:
赞
收藏
关注
评论
浙公网安备 33010602011771号