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;
Otra opción es usar la EXCEPTION_INITdirectiva Pragma para vincular un número de error de Oracle conocido a la excepción definida por el usuario;
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;
Por cierto, ¿hay alguna sintaxis para detectar errores simplemente proporcionando los códigos de error?
¿No puedo ir sin ir cuando los otros levantan líneas?
bernd_k
@bernd_k sí, lo haces, sin embargo, es una excepción no controlada
Sathyajith Bhat
2
Agregue un aumento en su CUANDO OTROS cuando sqlcodeNO sea 955 =)
Vincent Malgrat
El OP aún puede querer que se generen otros errores. Su bloque de excepción "tal cual" se comporta exactamente como CUANDO OTROS ENTONCES NULO. Creo que el OP quiere algo un poco más preciso y sutil.
Vincent Malgrat
@VincentMalgrat Estás en lo correcto.
Sathyajith Bhat
5
Similar a lo que Sathya ya ha sugerido, pero me gusta evitarlo por when otherscompleto si es posible: una excepción no controlada suele ser el resultado correcto para excepciones que no está manejando específicamente:
sqlcode
NO sea 955 =)Similar a lo que Sathya ya ha sugerido, pero me gusta evitarlo por
when others
completo si es posible: una excepción no controlada suele ser el resultado correcto para excepciones que no está manejando específicamente:fuente