(Oracle SQL)捕获唯一约束错误 [英] (Oracle SQL) Catching a unique constraint error

查看:191
本文介绍了(Oracle SQL)捕获唯一约束错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的代码:

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 块中的异常处理为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;
/

This is my code:

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;
/

When I run it (from the sql command line) I get this error at line 11:

expression is of wrong type (line 11 is "IF DUP_VAL_ON_INDEX THEN")

What could it be wrong?

解决方案

You need to define a nested PL/SQL Block, and handle exception in EXCEPTION BLOCK as WHEN DUP_VAL_ON_INDEX...

It should NOT be 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;
/

这篇关于(Oracle SQL)捕获唯一约束错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆