Oracle之异常处理

三种类型的异常错误:

  • 1. 预定义 ( Predefined )错误
    • ORACLE预定义的异常情况大约有24个。对这种异常情况的处理,无需在程序中定义,由ORACLE自动将其引发。
  • 2. 非预定义 ( Predefined )错误
    • 即其他标准的ORACLE错误。对这种异常情况的处理,需要用户在程序中定义,然后由ORACLE自动将其引发。
  • 3. 用户定义(User_define) 错误
    • 程序执行过程中,出现编程人员认为的非正常情况。对这种异常情况的处理,需要用户在程序中定义,然后显式地在程序中将其引发。

注意:异常处理可以按任意次序排列,但 OTHERS 必须放在最后

实例

预定义错误

DECLARE
	V_STR VARCHAR2(20);
BEGIN
	SELECT NAME INTO V_STR FROM 
	( SELECT 'AA' AS NAME , '20210101' AS DT FROM DUAL UNION ALL 
	  SELECT 'AC' AS NAME , '20210102' AS DT FROM DUAL UNION ALL
	  SELECT 'AD' AS NAME , '20210102' AS DT FROM DUAL ) A 
    WHERE A.DT = TO_CHAR(SYSDATE,'YYYYMMDD') ;
	DBMS_OUTPUT.PUT_LINE(V_STR);
EXCEPTION
   WHEN NO_DATA_FOUND THEN  
      DBMS_OUTPUT.PUT_LINE('今日无数据');
   WHEN TOO_MANY_ROWS THEN
      DBMS_OUTPUT.PUT_LINE('今日有多条数据');
   WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE(SQLCODE||'---'||SQLERRM);
END; 

非预定义错误

DECLARE
   exception_name EXCEPTION;
   PRAGMA EXCEPTION_INIT(exception_name, -903);
   /* ORA-00903: 表名无效 */
BEGIN
   DELETE FROM departments WHERE id = 12;
EXCEPTION
   WHEN exception_name THEN 
      DBMS_OUTPUT.PUT_LINE('表名无效!');
   WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE(SQLCODE||'---'||SQLERRM);
END;

用户自定义错误

DECLARE
   exception_name EXCEPTION;
BEGIN
   DELETE FROM departments WHERE id = 12;
   IF SQL%NOTFOUND THEN
      RAISE exception_name ;
   END IF;
   DBMS_OUTPUT.PUT_LINE('删除:'||SQL%ROWCOUNT||' 条数据');
   COMMIT;
EXCEPTION
   WHEN exception_name THEN 
      DBMS_OUTPUT.PUT_LINE('无数据!');
   WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE(SQLCODE||'---'||SQLERRM);
END;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值