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

Thi*_*ais 38 oracle plsql

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

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

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

Ric*_*mil 67

EXCEPTION
      WHEN DUP_VAL_ON_INDEX
      THEN
         UPDATE
Run Code Online (Sandbox Code Playgroud)

  • 你怎么能写出造成这个问题的价值? (2认同)

小智 26

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

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;
Run Code Online (Sandbox Code Playgroud)

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


Evi*_*ach 12

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

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