Oracle
 sql >> Base de données >  >> RDS >> Oracle

(Oracle SQL) Capture d'une erreur de contrainte unique

Vous devez définir un PL/SQL imbriqué Bloquer et gérer l'exception dans EXCEPTION BLOQUER comme WHEN DUP_VAL_ON_INDEX ...

Cela ne devrait PAS être 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;
/