Reportez-vous directement à l'exception par son numéro:
BEGINEXECUTE IMMEDIATE 'CREATE SEQUENCE S_TEST START WITH 1 INCREMENT BY 1';
EXCEPTION
WHEN OTHERS THENIF SQLCODE =-955THENNULL;-- suppresses ORA-00955 exceptionELSE
RAISE;ENDIF;END;
Une autre option consiste à utiliser la EXCEPTION_INITdirective Pragma pour lier un numéro d'erreur Oracle connu à une exception définie par l'utilisateur;
DECLARE
name_in_use exception;--declare a user defined exception
pragma exception_init( name_in_use,-955);--bind the error code to the above BEGINEXECUTE IMMEDIATE 'CREATE SEQUENCE S_TEST START WITH 1 INCREMENT BY 1';
EXCEPTION
when name_in_use thennull;--suppress ORA-00955 exceptionEND;
BTW Existe-t-il une syntaxe pour détecter les erreurs en fournissant simplement les codes d'erreur?
Oui, je l'ai démontré dans le premier exemple
Pour en savoir plus sur les variations à ce sujet:
ne puis-je pas simplement me passer de quand les autres élèvent des lignes?
bernd_k
@bernd_k oui vous le faites, cela va cependant comme une exception non
gérée
2
Veuillez ajouter une augmentation dans votre QUAND D'AUTRES quand ce sqlcoden'est PAS 955 =)
Vincent Malgrat
L'OP peut toujours souhaiter que d'autres erreurs soient déclenchées. Votre bloc d'exception "tel quel" se comporte exactement comme QUAND D'AUTRES PUIS NUL. Je pense que l'OP veut quelque chose d'un peu plus précis et subtil.
Vincent Malgrat
@VincentMalgrat Vous avez raison.
Sathyajith Bhat
5
Semblable à ce que Sathya a déjà suggéré, mais j'aime éviter when otherscomplètement si possible - une exception non gérée est généralement le résultat correct pour les exceptions que vous ne gérez pas spécifiquement:
sqlcode
n'est PAS 955 =)Semblable à ce que Sathya a déjà suggéré, mais j'aime éviter
when others
complètement si possible - une exception non gérée est généralement le résultat correct pour les exceptions que vous ne gérez pas spécifiquement:la source