Beziehen Sie sich auf die Ausnahme direkt nach Nummer:
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;
Eine andere Möglichkeit ist die Verwendung der EXCEPTION_INITPragma-Direktive, um eine bekannte Oracle-Fehlernummer an eine benutzerdefinierte Ausnahme zu binden.
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 Gibt es eine Syntax, um Fehler zu erkennen, indem nur die Fehlercodes angegeben werden?
Kann ich nicht einfach gehen, ohne dass andere die Zeilen erhöhen?
bernd_k
@bernd_k ja, das machst du, es ist jedoch eine unbehandelte Ausnahme
Sathyajith Bhat 20.12.11
2
Fügen Sie bitte eine Erhöhung in Ihrem WENN ANDERE hinzu, wenn sqlcodeNICHT 955 ist =)
Vincent Malgrat
Möglicherweise möchte das OP noch andere Fehler auslösen. Ihr Ausnahmeblock "as is" verhält sich genau wie ein WHEN OTHERS THEN NULL. Ich denke, das OP möchte etwas genaueres und subtileres.
Vincent Malgrat
@VincentMalgrat Du hast recht.
Sathyajith Bhat
5
Ähnlich wie Sathya es bereits vorgeschlagen hat, aber ich vermeide es gerne, when otherswenn möglich , vollständig - eine nicht behandelte Ausnahme ist normalerweise das richtige Ergebnis für Ausnahmen, die Sie nicht speziell behandeln:
sqlcode
NICHT 955 ist =)Ähnlich wie Sathya es bereits vorgeschlagen hat, aber ich vermeide es gerne,
when others
wenn möglich , vollständig - eine nicht behandelte Ausnahme ist normalerweise das richtige Ergebnis für Ausnahmen, die Sie nicht speziell behandeln:quelle