代码之家  ›  专栏  ›  技术社区  ›  Thiago Arrais

如何捕获pl/sql块中的唯一约束错误?

  •  35
  • Thiago Arrais  · 技术社区  · 16 年前

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

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

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

    3 回复  |  直到 16 年前
        1
  •  64
  •   Ricardo Villamil    16 年前
    EXCEPTION
          WHEN DUP_VAL_ON_INDEX
          THEN
             UPDATE
    
        2
  •  26
  •   William    16 年前

    我相信你有你的理由,但以防万一…您还应考虑改用“合并”查询:

    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;
    

    (将上面的内容修改为begin/end块;显然,您也可以独立地运行它)。

        3
  •  12
  •   EvilTeach    16 年前

    我怀疑你要找的条件是 DUP_VAL_ON_INDEX

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