oracle数据异常处理

------------------------------------
--处理异常后不继续执行
declare
type testitb is table of number index by binary_integer;
a testitb;
b number;
begin
a(10):=11;
a(1):=12;
a(4):=4;
for i in a.first .. a.last loop
b:=i;
dbms_output.put_line('a='||a(i));
end loop;
EXCEPTION
WHEN NO_DATA_FOUND THEN
dbms_output.put_line('b='||b);
end;


------------------------------------
--处理异常后继续执行
declare
type testitb is table of number index by binary_integer;
a testitb;
b number;
begin
a(10):=11;
a(1):=12;
a(4):=4;
for i in a.first .. a.last loop
begin
b:=i;
dbms_output.put_line('a='||a(i));
EXCEPTION
WHEN NO_DATA_FOUND THEN
dbms_output.put_line('b='||b);
end;
end loop;
end;

-------------------------------------
--捕获特定的异常使用  PRAGMA EXCEPTION_INIT

declare
vsql varchar2(1000);
invalid_sql_statement exception;
PRAGMA EXCEPTION_INIT(invalid_sql_statement,-900);
begin
vsql := 'selec * from az27';
execute immediate vsql;
exception
when invalid_sql_statement then
dbms_output.put_line(vsql);
end;


-----------------------------------------
--使用raise_application_error得到自定义异常
declare
vsql varchar2(1000);
invalid_sql_statement exception;
--PRAGMA EXCEPTION_INIT(invalid_sql_statement,-900);
begin
vsql := 'selec * from az27';
execute immediate vsql;
exception
when others then
dbms_output.put_line(sqlcode);
RAISE_APPLICATION_ERROR(-20123,sqlerrm||vsql,false);
end;


-----------------------
--自定义异常
BEGIN
DECLARE
Insufficient_credite EXCEPTION;
BEGIN
RASISE Insufficient_credite;
EXCEPTION
WHEN Insufficient_credite THEN
--可以在此处理异常
   extend_credite(cust_id);
END -嵌套块结束
EXCEPTION
WHEN Insufficient_credite THEN
--超出范围,不能在这里处理异常
END;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值