Ver Mensaje Individual
  #3 (permalink)  
Antiguo 06/04/2011, 16:10
yabad
 
Fecha de Ingreso: abril-2011
Mensajes: 1
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Dudas sobre triggers, para entendidos en pl-pgsql

Buenas tardes
Por puntos:

1-¿Cuando se utiliza el before y after a la hora de disparar un trigger?, porque muchas veces, parece como si diera igual usar uno que otro. ¿Cuando conviene utilizar uno cuando el otro?
Rpta:Para nada da igual.... porque si lo defines como before, el trigger se va a disparar antes de ejecutar la acción sobre la tabla, por el contrario si defines un after, el trigger se va a disparar después de ejecutada la acción y en dependencia del return de la función, las acciones que definas en la función de tipo trigger se van a hacer o no, por ejemplo:
Una función de tipo trigger que devuelva null, si el trigger está definido como before, quiere decir que nada de lo que defininiste en el trigger se va a realizar.

2.- la clausula for each hace que te recorra cada tupla de la tabla , pero la clausula statement, ¿recorre toda la tabla sin necesidad de hacer un for?. ¿Lo mismo que antes, cuando conviene utilizar uno y cuando otro?
Rpta: En postgre no existe diferencia entre uno u otro, porque definas lo que definas siempre se va a ser for each row.

3.- Cuando el trigger devuelve null, ¿significa que no hace nada sobre la sentencia?, entonces, ¿como se refleja esa operacion, que no devuelve nada en la tabla?, ¿significa eso que si devuelve null, se utiliza solo sacar mensajes por pantalla?
Rpta: ya te explicaba que si importaba lo que devuelva el return, si el trigger está definido para que se dispare before, pero si lo definiste con un after, no importa lo que le pongas al return ...
Y es importante retornar las variables new o old si lo que quieres es insertar datos en la BD; o si lo que quieres es validar algo antes de insertar y no cumple lo que definiste, entonces que mande un mensaje.

4.- El que devuelva new ¿significa que es entonces cuando nos va a permitir hacer modificaciones en la tabla?
Rpta: No necesariamente...
Tu puedes actualizar y no retornar new.
Recuerda que new es una variable de tipo la tabla con la que estás trabajando y que cuando la retornas, si no especificas un atributo en específico, es la tupla completa.
New normalmente se retorna si quieres insertar datos....
Saludos y espero que te sirvan las respuestas