当前位置:  开发笔记 > 数据库 > 正文

如何在PL/SQL块中捕获唯一约束错误?

如何解决《如何在PL/SQL块中捕获唯一约束错误?》经验,为你挑选了3个好方法。

假设我有一个Oracle PL/SQL块,它将记录插入表中,需要从唯一约束错误中恢复,如下所示:

begin
    insert into some_table ('some', 'values');
exception
    when ...
        update some_table set value = 'values' where key = 'some';
end;

为了捕获唯一约束错误,是否可以替换省略号?



1> Ricardo Vill..:
EXCEPTION
      WHEN DUP_VAL_ON_INDEX
      THEN
         UPDATE


你怎么能写出造成这个问题的价值?

2> 小智..:

我确定你有理由,但为了以防万一......你还应该考虑使用"合并"查询:

begin
    merge into some_table st
    using (select 'some' name, 'values' value from dual) v
    on (st.name=v.name)
    when matched then update set st.value=v.value
    when not matched then insert (name, value) values (v.name, v.value);
end;

(将上面的内容修改为开始/结束块;显然你也可以独立于程序运行它).



3> EvilTeach..:

我怀疑你正在寻找的条件是 DUP_VAL_ON_INDEX

EXCEPTION
    WHEN DUP_VAL_ON_INDEX THEN
        DBMS_OUTPUT.PUT_LINE('OH DEAR. I THINK IT IS TIME TO PANIC!')

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有