linux中plsql异常中断,plsql异常处理

plsql 异常分为:

系统异常

oracle 定义了错误编号甚至错误名字的异常

系统异常分为预定义异常和非预定义异常

预定义异常:

有错误编号也有错误名字

预定义异常:

有错误编号无错误名字

自定义异常

根据自己的业务需求,自已的异常

异常处理的方法:

异常处理的完整流程:

定义异常->抛出异常->捕获及处理异常

在这这个完整流程中,有些过程根据异常的类型不同而有处省略

处理预定义异常

常见的预定义异常

NO_DATA_FOUND         一个select 语句没有查询到数据

TOO_MANY_ROWS        select返回了多行数据 into 到变量

ZERO_DIVIDE         发生了零除

DUL_VAL_ON_INDEX    试图在在唯一约束的列上存储重复值

预定义的异常处理方法:

捕获及处理就可以了,定义、抛出可以省略

例:

DECLARE

v_name scott.emp.ename%type;

BEGIN

select ename into v_name from scott.emp where empno=&a;

dbms_output.put_line('Name: '||v_name);

EXCEPTION

WHEN NO_DATA_FOUND THEN

dbms_output.put_line(chr(13));

dbms_output.put_line('no data found!');

WHEN TOO_MANY_ROWS THEN

dbms_output.put_line('too many rows!');

END;

/

处理非预定义异常

非预定义异常有错误号没有名字,处理的办法是:自己定义一个名字,绑定到错误号,捕获错误名

DECLARE

myexcp EXCEPTION;

PRAGMA EXCEPTION_INIT(myexcp,-02292);

dno scott.emp.deptno%type;

BEGIN

dno:=&inputno;

delete from scott.dept where deptno=dno;

EXCEPTION

WHEN myexcp THEN

delete from scott.emp where deptno=dno;

delete from scott.dept where deptno=dno;

END;

/

自定义异常处理

流程:

定义异常->抛出异常->捕获及处理异常

例:定义一个异常,往scott.emp表中插数据,如果工资少于1500 抛出异常,不能让他插

DECLARE

v_no scott.emp.empno%type;

v_name scott.emp.ename%type;

v_sal scott.emp.sal%type;

myexcp EXCEPTION;

BEGIN

v_no:=&inputno;

v_name:=&inputname;

v_sal:=&inputsal;

if v_sal<1500 then

raise myexcp;

end if;

insert into scott.emp (empno,ename,sal) values (v_no,v_name,v_sal);

EXCEPTION

WHEN myexcp THEN

insert into scott.emp (empno,ename,sal) values (v_no,v_name,1500);

END;

/

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/21175589/viewspace-755639/,如需转载,请注明出处,否则将追究法律责任。

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
©️2021 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值