如何在用户尝试输入重复 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 仅用于演示目的,理想情况下您不会在生产代码中使用它。
是的,我问了很多问题,因为我在这里学到的比书本上的多。我已经创建了一个简单的代码块来产生所需的输出,但对于我所在的当前学习块来说它似乎很简单。如果 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 仅用于演示目的,理想情况下您不会在生产代码中使用它。