Oracle - Capturar RAISE_APPLICATION_ERROR de trigger de BBD

   
Vista:

Capturar RAISE_APPLICATION_ERROR de trigger de BBD

Publicado por JuanMi (4 intervenciones) el 18/12/2008 12:30:41
Hola, mi problema es el siguiente:

Necesito capturar una excepción de un trigger de una tabla de la BBDD del tipo BEFORE_INSERT en un formulario creado con developer.

En esencia el trigger controla que existan unos registros en una primera tabla, si asi es, deja insertar en una segunda tabla ( la afectada por el trigger), si no existen estos registros nuevos en la primera tabla hago saltar una EXCEPTION del tipo RAISE_APPLICATION_ERROR(-20015, 'No existen registros') y no me deja insertar en la segunda.

Lo que no consigo es propagar esa excepción hasta el form para mostrar el error al usuario.

¿Alguien puede echarme una mano?

Un saludo y gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Capturar RAISE_APPLICATION_ERROR de trigger de

Publicado por Carlos (17 intervenciones) el 18/12/2008 16:40:19
Hola.
Al decir que no consigues propagar la excepción ¿te refieres a que no llega a la capa de Forms, o a que no llega el mensaje?.

Si se trata de que capturas el error, pero no llega tu mensaje personalizado, ten en cuenta que a Forms llegará el código de error (-20015) pero no el mensaje. Al menos este era el comportamiento en versiones anteriores de Forms, no se si en las últimas ocurrirá esto.

A tu forma llegará el código de error, y como mensaje algo así como "Se ha producido un error en la base de datos XXXX", donde XXXX es un volcado de los mensajes de error de la pila.

Si se trata de que no puedes capturar el error, ¿cómo lo estás haciendo? ¿En un ON-ERROR o en una sección de excepciones?.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Capturar RAISE_APPLICATION_ERROR de trigger de

Publicado por JuanMi (4 intervenciones) el 19/12/2008 10:55:25
Hola,

pues lo intento capturar en el evento ON-ERROR del formulario, obteniendo el SQLCODE y el SQLERRM y mostrándolo con un mensaje al usuario.

La versión del form, por si sirve de orientación, es : Forms 10.1.2.0.2.

Mediante un paquete de mensajes creado para mostrar los errores, que cuando el desarrollo finalice, se eliminarán muestra el mensaje de error de form FRM.40508, "ORACLE error: unable to INSERT record.". Es correcto, no debe permitir la inserción, pero no recoje el error que se produce en el trigger <BEFORE_INSERT>.

Un saludo y gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Capturar RAISE_APPLICATION_ERROR de trigger de

Publicado por Carlos (17 intervenciones) el 19/12/2008 15:52:20
Hola.
Lo que sucede es que para capturar el error de la base de datos en el disparador ON-ERROR debes usar DBMS_ERROR_CODE y DBMS_ERROR_TEXT.
Esto suponiendo que la inserción que te falla sea una inserción sobre el bloque, y que sea Forms quien gestione inserciones, actualizaciones, etc.

Es decir, en el disparador ON-ERROR tendrías un código similar al siguiente:

IF dbms_error_code = -20015 THEN
< tratas el mensaje >
END IF;

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Capturar RAISE_APPLICATION_ERROR de trigger de

Publicado por JuanMi (4 intervenciones) el 22/12/2008 09:27:38
Gracias Carlos, lo probaré cuando terminen con el mantenimiento de la BD, es decir el día 7 jeje, que no tienen otra cosa que hacer que hacerlo estos 3 días antes de las vacas.

Un saludo y Felices Fiestas, ya te comentaré por aqui que tal me ha ido con esto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Capturar RAISE_APPLICATION_ERROR de trigger de

Publicado por Cesar (1 intervención) el 06/09/2011 20:10:18
hola , fue de gran ayuda tu ejemplo para capturar el error desde un FORM gracias me sirvio mucho

blog como este no deberian de faltar....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar