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

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

2012-01-09 20:09 369 查看
--异常处理

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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息