您的位置:首页 > 数据库 > Oracle

Oracle笔记 七、PL/SQL 异常处理

2011-05-03 07:27 429 查看
[code]     [code]--异常处理


declare


sNum number := 0;


begin


sNum := 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;


begin


age := &请输入年龄;


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;


begin


age := &请输入年龄;


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;


 


--异常处理


declare


vSal emp.sal%type;


begin


select sal into vSal from emp;


exception


when too_many_rows then


dbms_output.put_line('多条数据');


  when others then


dbms_output.put_line('Error');


end;


 


declare


vSal emp.sal%type;


begin


select sal into vSal from emp where empno = 1;


exception


when 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;


 


declare


vDeptno dept.deptno%type := 10;


vErrCode number;


vErrMsg varchar2(1024);


begin


delete from dept where deptno = vDeptno;


commit;


exception


  when others then


rollback;


vErrCode := SQLCODE;


vErrMsg := SQLERRM;


insert into errorLog values(seq_errorLog_id.nextval, vErrCode, vErrMsg, sysdate);


    commit;


end;


 


select * from errorLog;

[/code]
[/code]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: