Hay manera de dar un mensaje de error fácil de usar sobre la violación de restricciones
Digo que tengo la columnaGender
y restricciónCHECK( Gender IN ('F', 'M', 'OTHER'))
.
Si accidentalmente olvidé manejar esto en el lado del cliente, el usuario verá algo comoORA-02290: check constraint (SYS_C099871244) violated
que no es muy útil ni para el usuario, ni para el desarrollador que mantiene o depura
Hay manera de proporcionar un mensaje definido por el desarrollador como (pseudo) Java'sassert Gender IN (0,1):'Gender must be F or M'
La única forma en que se me ocurre es mover las restricciones al disparador ANTES DE ACTUALIZAR O INSERTAR y, en caso de falla, hacerRaise_Application_Error( code, my_message )
. Pero no me gusta
EDITA Lista de razones específicas, según los comentarios
1. Realmente me gusta mantener la lógica lo más cerca posible de los datos
2. Para el usuario final, el mensaje Raise_Application_Error no se puede distinguir del mensaje de la aplicación
3. Los desarrolladores verán un buen mensaje, incluso si los datos de acceso omiten la aplicación
4. mover las restricciones a los desencadenantes es feo (¿verdad?), así que tengo que encontrar algo diferente de Raise_Application_Error
EDIT2 1,5 años después, y después de dejar el trabajo relacionado con db, finalmente se me ocurrió lo que yoDe Verda no me gusta de esto - duplicación de código. Tengo que repetir exactamente la misma lógica en el servidor y en el lado del cliente. Lo más probable, en 2 idiomas diferentes. Y mantenlos sincronizados. Esto es simplemente feo.
Aunque las respuestas indican claramente, no hay nada que pueda hacer al respecto. Así que es hora de que sea un buen ciudadano y finalmente acepte una respuesta (lo siento, me olvidé de eso).