Comment attraper une contrainte unique erreur dans une PL/SQL bloc?

Dire que j'ai un Oracle PL/SQL bloc qui insère un enregistrement dans une table et ont besoin de récupérer à partir d'une unique erreur de contrainte, comme ceci:

begin
    insert into some_table ('some', 'values');
exception
    when ...
        update some_table set value = 'values' where key = 'some';
end;

Est-il possible de remplacer les points de suspension pour quelque chose dans le but d'attraper une contrainte unique erreur?

  • Utiliser les exceptions de cette façon est un peu lent, parce que le déclenchement d'exceptions prend beaucoup de temps. Essayez de fusion.
  • D'accord. Mais gardez à l'esprit que cet exemple est juste l'un des nombreux cas d'utilisation possible. La véritable question est "quel est l'id unique de l'erreur de contrainte?". C'est pourquoi j'ai voté William réponse jusqu', mais a accepté de Ricardo.
  • Exceptions dans le code PL/SQL ne sont pas aussi cher que dans les services de gestion ou de haut niveau pour les langages (C#, Java). Dans une DB application du réel "lenteur" est causée par db accès, PL/SQL exception coût est négligeable dans ce contexte