PL/SQL学习笔记-异常处理

一:预定义异常错误
先看代码:

declare 
mytitle labor.xland.title%type;
begin
select title into mytitle from labor.xland where state = 2;
dbms_output.put_line(mytitle);
exception
when no_data_found then
dbms_output.put_line('没有找到数据');
end;


这段程序当检索到数据的时候就输出数据
检索不到数据即输出  没有找到数据
no_data_found 是一个预定义异常错误类型
更多预定义异常错误,请看:
http://www.cnblogs.com/liulun/articles/1526177.html


二:非预定义异常错误
先看代码:

declare 
v_sqlcode number;
v_sqlerrm varchar2(2048);
begin
insert into labor.xland values(null,'1111',1);
exception
when no_data_found then
     dbms_output.put_line('没有找到数据');
when others then
     if sqlcode = -1400 then
        v_sqlcode := sqlcode;
        v_sqlerrm := sqlerrm;
        dbms_output.put_line(to_char(v_sqlcode));
        dbms_output.put_line(v_sqlerrm);
     end if;
end;

when 块不必跟end结束
if块需跟end if结束
sqlcode为错误码
sqlerrm为oracle反馈的错误信息
此程序输出:

-1400
ORA-01400: 无法将 NULL 插入 ("LABOR"."XLAND"."TITLE")

另外还有pragma exception_init(name,errcode)函数来处理非预定义异常
如:

declare 
v_exception exception;
pragma exception_init(v_exception,-1400);
begin
insert into labor.xland values(null,'1111',1);
exception
when no_data_found then
     dbms_output.put_line('没有找到数据');
when v_exception then
     dbms_output.put_line('没有找到数据1');
end;

这里提到了一个新的数据类型  exception
pragma exception_init(name,errcode)
把错误号为-1400的错误赋值给v_exception
在第二个when子句中不能使用sqlcode等系统变量

三:自定义异常并抛出
先看代码

declare 
v_exception EXCEPTION;
begin
RAISE   v_exception;
exception
when v_exception then
   dbms_output.put_line('捕获异常');
end;

先定义一个异常
然后抛出这个异常
然后捕获这个异常
如此而已

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值