Oracle - on commit

 
Vista:

on commit

Publicado por Carmita (5 intervenciones) el 05/07/2007 19:42:27
Hola, puede alguien ayudarme por fa, estoy haciendo una validación el momento que se ejecute el trigger on commit a nivel de forma, quiero que no se guarde el registro,
el codigo en el trigger es el siguiente:
BEGIN

IF :botones.WNUM_Total >= 8 THEN
alerta_error('Número de matriculados excede el número máximo configurado.');
END IF;
commit;
END;

Cuando el numero excede al indicado no debe ejecutarse, lo que sucede es que me da ese mensaje pero seguido de este me da otro que dice que si desea guardar los cambios y obviamente si el usuario escoge que si la informacion se guarda, pero la idea es que no me aparezca ningun mensaje y simplemente no se grabe.
Como puedo solucionar este problema si alguien puede ayudarme por favor, se lo agradeceria.
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:on commit

Publicado por mad (88 intervenciones) el 05/07/2007 19:44:47
Despues del mensaje pon RAISE FORM_TRIGGER_FAILURE;
De lo contrario, por caida, hace el commit.

Espero te sirva.
Salu2.
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:on commit

Publicado por Carmita (5 intervenciones) el 05/07/2007 19:49:16
gracias, pero no funciona, he puesto la linea que tu dices, pero me sigue preguntando si deseo guardar la informacion
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:on commit

Publicado por mad (88 intervenciones) el 06/07/2007 07:10:21
¿Solo te lo pregunta o te los guarda?
puedes subir el level del mensaje para que no te pregunte.

:SYSTEM.MESSAGE_LEVEL := 10;
COMMIT;
:SYSTEM.MESSAGE_LEVEL := 0;

De todas formas pon el commit en el ELSE:

IF CONDICION THEN
MENSAJES
RAISE FORM_TRIGGER_FAILURE;
ELSE
:SYSTEM.MESSAGE_LEVEL := 10;
COMMIT;
:SYSTEM.MESSAGE_LEVEL := 0;
END IF;

De esta forma no deberia preguntarte si entra por la condicion. No obstante mira que no estes haciendo algun otro cambio diferente a ese.

Salu2.
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:on commit

Publicado por Hector (127 intervenciones) el 06/07/2007 03:18:53
Prueba con el trigger de esta manera:

Declare
vMessageLevel Varchar2(25);
Begin
IF :botones.WNUM_Total >= 8 THEN
alerta_error('Número de matriculados excede el número máximo configurado.');
Else
vMessagel_Level := :System.Message_Level;
:System.Message_Level := '25';
Commit_Form;
:System.Message_Level := vMessage_Level;
END IF;
End;

Y me dejas saber como te fue.

Te dejo de tarea, para que te diviertas investigando para que sirve el :System.Message_Level en forms.
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