您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

PL/SQL基础-异常处理

2024/3/17 17:16:16发布20次查看
oracle异常分为两种类型:系统异常、自定义异常。 其中系统异常又分为:预定义异常和非预定义异常。1.预定义异常oracle定义了他们
异常处理
一、异常的类型
oracle异常分为两种类型:系统异常、自定义异常。
 其中系统异常又分为:预定义异常和非预定义异常。
1.预定义异常
oracle定义了他们的错误编号和异常名字,常见的预定义异常处理oracle常见的错误
no_data_found select ... into ... 时,没有找到数据
dul_val_on_index 试图在一个有惟一性约束的列上存储重复值
cursor_already_open 试图打开一个已经打开的游标
too_many_rows select ... into ... 时,查询的结果是多值
zero_divide 零被整除
2.非预定义异常
oracle为它定义了错误编号,但没有定义异常名字。我们使用的时候,先声名一个异常名,
 通过伪过程pragma exception_init,将异常名与错误号关联起来。
3.自定义异常
 程序员从我们业务角度出发,制定的一些规则和限制。
二、异常处理
pl/sql中,异常处理按个步骤进行:
 定义异常
 抛出异常
 捕获及处理异常
a.定义异常
exception_name exception;
b.抛出异常
raise exception_name
c.捕获及处理异常
exception
when e_name1 [or e_name2 ... ] then
statements;
when e_name3 [or e_name4 ... ] then
statements;
......
when others then
statements;
end;
--使用预定义的异常
--根据用记输入的商品id来查商品库存
declare
v_id es_product.id%type := &v_id; --用户输入商品id
v_stockcount es_product.stockcount%type; ---库存量
begin
select stockcount into v_stockcount from es_product where id = v_id;
dbms_output.put_line('库存量:' || v_stockcount);
--判断库存量是否正常
if v_stockcount > 0 then
--更新库存,一次买一个减掉一个
update es_product
set stockcount = stockcount - 1
--更新指定的,不然会全部更新
where id = v_id;
--提出数据操作
commit;
dbms_output.put_line('库存更新成功');
elsif v_stockcount = 0 then
dbms_output.put_line('库存量是0,,没有库存了');
else
dbms_output.put_line('库存异常');
end if;
exception
when no_data_found then
dbms_output.put_line('该商品不存在!');
rollback;
when too_many_rows then
dbms_output.put_line('该商品存在多个!');
rollback;
when others then
dbms_output.put_line('发生了其它错误!');
rollback;
end;
--自定义异常
--实现订单删除
select * from es_order;
declare
e_no_result exception;
v_id es_order.id%type := &id;
v_exception1 constant varchar2(50) := '删除数据不成功!';
v_exception2 constant varchar2(50) := '发生了错误!';
begin
delete from es_order where id = v_id;
if (sql%notfound) then
--删除没有执行
raise e_no_result;
end if;
exception
when e_no_result then
dbms_output.put_line(v_exception1);
rollback;
when others then
dbms_output.put_line(v_exception2);
rollback;
end;
--------------------------------------分割线 --------------------------------------
rlwrap - 解决linux下sqlplus退格、上翻键乱码问题
sqlplus spool 到动态日志文件名
oracle sqlplus提示符设置
通过设置sqlplus arraysize(行预取)加快sql返回速度
pl/sql developer实用技巧分享
--------------------------------------分割线 --------------------------------------
本文永久更新链接地址:
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product