Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

(Oracle SQL) Capturando um erro de restrição exclusivo


Você precisa definir um PL/SQL aninhado Bloqueie e trate a exceção em EXCEPTION BLOQUEAR como WHEN DUP_VAL_ON_INDEX ...

Deve NÃO seja 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;
/