Oracle
 sql >> Database >  >> RDS >> Oracle

(Oracle SQL) Rilevamento di un errore di vincolo univoco

Devi definire un PL/SQL annidato Blocca e gestisci l'eccezione in EXCEPTION BLOCCO come WHEN DUP_VAL_ON_INDEX ...

Dovrebbe NON essere 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;
/