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;
Outra opção é usar a EXCEPTION_INITdiretiva Pragma para vincular um número de erro conhecido do Oracle à exceção definida pelo usuário;
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 alguma sintaxe para detectar erros fornecendo apenas os códigos de erro?
não posso ir sem o quando os outros levantam linhas?
18111 berlim_k
@bernd_k sim, você faz isso, mas funciona como uma exceção sem
tratamento #
2
Por favor, adicione um aumento no seu WHEN OTHERS quando o sqlcodeNOT 955 =) é #
Vincent Malgrat
O OP ainda pode querer que outros erros sejam gerados. Seu bloco de exceção "como está" se comporta exatamente como um WHEN OTHERS THEN NULL. Eu acho que o OP quer algo um pouco mais preciso e sutil.
Vincent Malgrat
@VincentMalgrat Você está correto.
Sathyajith Bhat
5
Semelhante ao que Sathya já sugeriu, mas eu gosto de evitar when otherscompletamente, se possível - uma exceção não tratada geralmente é o resultado correto para as exceções que você não está lidando especificamente:
sqlcode
NOT 955 =) é #Semelhante ao que Sathya já sugeriu, mas eu gosto de evitar
when others
completamente, se possível - uma exceção não tratada geralmente é o resultado correto para as exceções que você não está lidando especificamente:fonte