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

How do I raise the DUP_VAL_ON_INDEX when user attempts to enter duplicate ID

是的,我问了很多问题,因为我在这里学到的比书本上的多。我已经创建了一个简单的代码块来产生所需的输出,但对于我所在的当前学习块来说它似乎很简单。如果 id已经存在?还没有学习过程或功能,但可以猜测这将是一种更明智的方法。如果条件出现,我到目前为止是否满足和异常处理程序,或者我应该在声明中添加更多?感谢提供的建议和学习要点。

我的代码:

BEGIN
   INSERT INTO dd_donor (iddonor)
   VALUES (305)

EXCEPTION
    WHEN DUP_VAL_ON_INDEX THEN
    DBMS_OUTPUT.PUT_LINE('ID already Exists');
END;

DUP_VAL_ON_INDEX 当您尝试在 支持的列中存储重复值 时引发异常24=]唯一索引.

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

设置

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 仅用于演示目的,理想情况下您不会在生产代码中使用它。