【发布时间】:2014-05-27 10:07:40
【问题描述】:
是否可以捕获唯一索引违规和 raise_application_error。我们正在尝试使用一揽子触发器并捕获异常,但是我们总是遇到 oracle 异常。
ORA-00001:违反唯一约束 (TEST_UNIQUE_INDEX)
我们对表有一个基于 FUNCTION-BASED 的约束。
CREATE TABLE TEST_CONSTRAINT(
"ID" NUMBER NOT NULL ENABLE,
"LOCATION" VARCHAR2(20) NOT NULL,
"DEPT" VARCHAR2(20) NOT NULL,
"RECORD" NUMBER NOT NULL)
/
CREATE UNIQUE INDEX TEST_UNIQUE_INDEX ON TEST_CONSTRAINT (
CASE "RECORD" WHEN 1 THEN "LOCATION" ELSE NULL END,
CASE "RECORD" WHEN 1 THEN "DEPT" ELSE NULL END)
/
更新触发代码之前
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
ERROR_MESSAGE := SQLERRM;
DBMS_OUTPUT.PUT_LINE('SQLERRM '|| ERROR_MESSAGE);
WHEN OTHERS THEN
ERROR_MESSAGE := SQLERRM;
DBMS_OUTPUT.PUT_LINE('SQLERRM '|| ERROR_MESSAGE);
END;
编辑 1:
这里的要求是强加选择性唯一性,即只能将一组位置/部门设置为记录(在应用程序中是布尔值)。在所有其他情况下,我们必须生成 raise_application_error。
【问题讨论】:
标签: exception oracle11g unique-constraint unique-index