当用户尝试输入重复ID时,如何引发DUP_VAL_ON_INDEX

时间:2015-06-30 09:54:28

标签: oracle plsql exception-handling oracle11g

是的,我问了很多问题,因为我在这里学到的东西多于书本。我已经创建了一个简单的代码块来生成所需的输出,但对于我当前的学习块来说似乎很简单。这个代码是否适用于那些尝试更新捐赠者表的iddonor的人已经存在? Haven尚未学习程序或功能,但可以猜测这将是一种更明智的方法。如果条件出现或我应该在声明中添加更多内容,我到目前为止满足和异常处理程序是什么?如果提供,请欣赏建议和学习要点。

我的代码:

PostProcessable...

1 个答案:

答案 0 :(得分:1)

当您尝试在唯一索引支持的列中存储重复值时,会引发

DUP_VAL_ON_INDEX 异常。

让我们看一个简单的例子。我创建了一个包含单列的表,并将其作为主键,这将由隐式唯一索引支持。

<强>设置

SQL> CREATE TABLE t(ID NUMBER);

Table created.

SQL> ALTER TABLE t ADD CONSTRAINT t_uk PRIMARY KEY(ID);

Table altered.

SQL> INSERT INTO t(ID) VALUES(1);

1 row created.

SQL> COMMIT;

Commit complete.

SQL> SELECT * FROM t;

        ID
----------
         1

SQL> BEGIN
  2  INSERT INTO t(ID) VALUES(1);
  3  END;
  4  /
BEGIN
*
ERROR at line 1:
ORA-00001: unique constraint (LALIT.T_UK) violated
ORA-06512: at line 2

因此,违反了唯一约束。我们来看看如何捕获 DUP_VAL_ON_INDEX 异常:

测试用例

SQL> SET serveroutput ON
SQL> BEGIN
  2  INSERT INTO t(ID) VALUES(1);
  3  EXCEPTION
  4  WHEN DUP_VAL_ON_INDEX THEN
  5    DBMS_OUTPUT.PUT_LINE('Duplicate value on index');
  6  END;
  7  /
Duplicate value on index

PL/SQL procedure successfully completed.

SQL>

顺便说一句,DBMS_OUTPUT仅用于演示目的,理想情况下,您不会在生产代码中使用它。