【问题标题】:Oracle plsql catching exceptionsOracle plsql 捕获异常
【发布时间】:2011-11-20 10:01:09
【问题描述】:

在我将值插入不同表的过程中,每当表发生唯一/主键冲突时,我都想专门为该表处理异常。如何捕获不同的重复值异常?

【问题讨论】:

    标签: oracle plsql


    【解决方案1】:

    查看一些教程,例如this

    您的唯一/主键违规将是 DUP_VAL_ON_INDEX 异常。

    【讨论】:

    • 嗯,但是我怎么知道它是从哪个表插入中抛出的?
    • 那么你可能不得不用这样一个异常块来包装你的每一个语句,或者你给自己设置一个标记,这样你就知道哪个是最后一次成功的插入。
    • 嗯,这将是主键违规,但我可以不同地处理外键错误吗?
    • 这应该会引发 ORA-02291 检查最后一部分。执行 WHEN OTHERS 后,您可以获得错误代码。使您的行为依赖于该错误代码。
    【解决方案2】:

    创建表后,您应该创建一个 TRIGGER 和一个 SEQUENCE 以在插入之前在您的表上运行并捕获 :NEW.PRIMAY_KEY 是否为空,然后从序列中获取它。

    使用这种方法,您将始终避免使用 DUP_VAL_ON_INDEX。

    我会避免使用 WHEN OTHERS,因为这在真正的错误处理逻辑中没有实际用途。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-03
      • 1970-01-01
      • 2012-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-24
      相关资源
      最近更新 更多