sql - (Oracle SQL)捕获唯一约束错误

标签 sql oracle plsql syntax-error

这是我的代码:

Declare
  violation_of_constraint EXCEPTION;
BEGIN
  -- (A FEW INSERTS HERE: A, B, C)
  SAVEPOINT X;
  -- (ANOTHER INSERT HERE: D)
  IF DUP_VAL_ON_INDEX THEN
    ROLLBACK TO X;
    COMMIT;
    RAISE violation_of_constraint;
  END IF;
EXCEPTION
  WHEN violation_of_constraint THEN
    DBMS_OUTPUT.PUT_LINE('Value already exists');
    COMMIT;
END;
/

当我运行它(从sql命令行)时,在第11行出现此错误:
expression is of wrong type (line 11 is "IF DUP_VAL_ON_INDEX THEN")

怎么了

最佳答案

您需要定义一个嵌套的PL/SQL块,并将EXCEPTION BLOCK中的异常作为WHEN DUP_VAL_ON_INDEX处理...

不应为IF DUP_VAL_ON_INDEX

Declare
violation_of_constraint EXCEPTION;
BEGIN
  BEGIN
  -- (A FEW INSERTS HERE: A, B, C)
  SAVEPOINT X;
  -- (ANOTHER INSERT HERE: D)
  EXCEPTION 
  WHEN DUP_VAL_ON_INDEX THEN
    ROLLBACK TO X;
    COMMIT;
    RAISE violation_of_constraint;
  END;
EXCEPTION
WHEN violation_of_constraint THEN
DBMS_OUTPUT.PUT_LINE('Value already exists');
COMMIT;
END;
/

关于sql - (Oracle SQL)捕获唯一约束错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22175894/

相关文章:

sql - 与直接运行相比, hibernate 选择性能较差 - 如何调试?

python - 如何将 cx_Oracle 查询中的 '?' 替换为提供的值

java - 将可变参数从 Java 代码传递到 SQL 或 PL/SQL

sql - 我想将 unix 和 sqlplus 的输出复制到一个文件中

java - 本地排序还是重新查询?

sql - 如何根据出现的列序列提取行

php - 哪个效率更高 : a SQL JOIN or nested PHP loop?

oracle - hibernate 对 oracle db 上的生成器类 ="native"有什么作用?

PL/SQL 中的 SQL 注入(inject) - 神话还是事实?

sql - 甲骨文朱利安一天