Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » PostgreSQL »

Problemas con Trigger

Estas en el tema de Problemas con Trigger en el foro de PostgreSQL en Foros del Web. Hola a todos en FDW, tengo un problema con una funcion que llamo en un trigger, @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver original CREATE OR REPLACE ...
  #1 (permalink)  
Antiguo 08/03/2013, 19:10
Avatar de jlct  
Fecha de Ingreso: abril-2012
Ubicación: Venezuela
Mensajes: 148
Antigüedad: 12 años, 1 mes
Puntos: 19
Problemas con Trigger

Hola a todos en FDW, tengo un problema con una funcion que llamo en un trigger,
Código SQL:
Ver original
  1. CREATE OR REPLACE FUNCTION email(valor CHAR(5)) RETURNS RECORD AS
  2. $BODY$
  3. DECLARE
  4. correo RECORD;
  5. BEGIN
  6. SELECT INTO correo tpersona.per_correo para, 'Actividad Administrativa' asunto,
  7. 'Saludos, por medio de la presente se le notifica que hoy ' || to_char(now(),'DD/MM/YYYY') || ' le fue asignado(a) a la actividad ' || quote_literal(act_nombre) || ' en el ambiente ' || amb_nombre cuerpo
  8. FROM tpersona
  9. INNER JOIN tdetalle_actividad_ad ON tpersona.cedula = tdetalle_actividad_ad.cedula
  10. INNER JOIN tactividades_administrativas ON tdetalle_actividad_ad.cod_actividad = tactividades_administrativas.cod_actividad
  11. INNER JOIN tambiente ON tdetalle_actividad_ad.cod_ambiente = tambiente.cod_ambiente WHERE tdetalle_actividad_ad.cod_detalle_actividad = quote_literal($1);
  12. RETURN correo;
  13. END;
  14. $BODY$
  15. LANGUAGE 'plpgsql'
  16.  
  17. CREATE OR REPLACE FUNCTION llamar_email()
  18. RETURNS TRIGGER AS
  19. $BODY$
  20. DECLARE parametro TEXT;
  21. BEGIN
  22. parametro := NEW.cod_detalle_actividad;
  23. EXECUTE email(parametro);
  24. RETURN NEW;
  25. END;
  26. $BODY$
  27. LANGUAGE 'plpgsql'
  28.  
  29. CREATE TRIGGER Enviar_correo AFTER INSERT OR UPDATE ON tdetalle_actividad_ad
  30. FOR EACH ROW
  31. EXECUTE PROCEDURE llamar_email();

En base lo que quiero que haga es luego de insertar un registro, me busque la informacion necesaria para enviar un emal (en el select tengo los datos 'para', 'asunto' y 'cuerpo')

los querys funcionan pero al insertar me envia el siguiente error de sintaxis

Código SQL:
Ver original
  1. ERROR:  syntax error at OR near ","
  2. LINE 1: (,,)
  3.          ^
  4. QUERY:  (,,)
  5. CONTEXT:  PL/pgSQL FUNCTION llamar_email() line 5 at EXECUTE statement

espero me puedan ayudar, gracias!!
  #2 (permalink)  
Antiguo 09/03/2013, 21:01
 
Fecha de Ingreso: octubre-2010
Mensajes: 83
Antigüedad: 13 años, 6 meses
Puntos: 4
Respuesta: Problemas con Trigger

Tu funcion email esta bien?
  #3 (permalink)  
Antiguo 09/03/2013, 21:05
Avatar de jlct  
Fecha de Ingreso: abril-2012
Ubicación: Venezuela
Mensajes: 148
Antigüedad: 12 años, 1 mes
Puntos: 19
Respuesta: Problemas con Trigger

Bueno tu ejecutas el script y funciona, pero cuando vas a insertar un registro manda el error que mencioné arriba, pero según mi parecer esta bien, eso es lo que quiero que haga.

Espero me puedan ayudar, y muchas gracias por responder.
  #4 (permalink)  
Antiguo 11/03/2013, 07:43
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Problemas con Trigger

Postea tambien la funcion email para darte una luz
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 11/03/2013, 12:12
Avatar de jlct  
Fecha de Ingreso: abril-2012
Ubicación: Venezuela
Mensajes: 148
Antigüedad: 12 años, 1 mes
Puntos: 19
Respuesta: Problemas con Trigger

Ahí esta la función email. Es la primera que se menciona.

Código:
CREATE OR REPLACE FUNCTION email(valor char(5)) RETURNS RECORD AS
$BODY$
DECLARE 
correo RECORD;
BEGIN
SELECT INTO correo tpersona.per_correo para, 'Actividad Administrativa' asunto, 
'Saludos, por medio de la presente se le notifica que hoy ' || to_char(now(),'DD/MM/YYYY') || ' le fue asignado(a) a la actividad ' || quote_literal(act_nombre) || ' en el ambiente ' || amb_nombre cuerpo 
FROM tpersona
INNER JOIN tdetalle_actividad_ad ON tpersona.cedula = tdetalle_actividad_ad.cedula
INNER JOIN tactividades_administrativas ON tdetalle_actividad_ad.cod_actividad = tactividades_administrativas.cod_actividad 
INNER JOIN tambiente ON tdetalle_actividad_ad.cod_ambiente = tambiente.cod_ambiente WHERE tdetalle_actividad_ad.cod_detalle_actividad = quote_literal($1);
RETURN correo;
END;
$BODY$
LANGUAGE 'plpgsql'
De todas maneras publico nuevamente el codigo solo de la funcion email.
  #6 (permalink)  
Antiguo 11/03/2013, 12:19
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Problemas con Trigger

La función retorna un record. Cuando la ejecutas en el trigger no tiene variable de salida.

Ademas veo que hace un select y no procesa absolutamente nada
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #7 (permalink)  
Antiguo 11/03/2013, 12:28
Avatar de jlct  
Fecha de Ingreso: abril-2012
Ubicación: Venezuela
Mensajes: 148
Antigüedad: 12 años, 1 mes
Puntos: 19
Respuesta: Problemas con Trigger

Esta es una idea que tuve mas no estoy seguro que fuera la mejor manera posible de hacerlo..

Lo que busco es con la id del nuevo registro buscar en mi consulta el para, asunto y cuerpo, para con esos valores poder enviar un correo.

la idea es almacenar esos 3 valores en una varibla que maneje algo parecido a un array, pero al parecer no se si es posible hacerlo.
  #8 (permalink)  
Antiguo 11/03/2013, 12:51
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Problemas con Trigger

Código SQL:
Ver original
  1. CREATE OR REPLACE FUNCTION llamar_email()
  2. RETURNS TRIGGER AS
  3. $BODY$
  4. DECLARE
  5. parametro TEXT;
  6. Datos record;
  7. BEGIN
  8. parametro := NEW.cod_detalle_actividad;
  9. Datos := email(parametro);
  10. INSERT INTO tabla_mails VALUES(Datos.para,Datos.asunto, Datos.Cuerpo);
  11. RETURN NEW;
  12. END;
  13. $BODY$
  14. LANGUAGE 'plpgsql'

Posterior a eso, puedes tener un job que constantemente valide dicha tabla (Tabla_mails) para hacer los respectivos envios.

Es solo una idea
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #9 (permalink)  
Antiguo 11/03/2013, 14:51
Avatar de jlct  
Fecha de Ingreso: abril-2012
Ubicación: Venezuela
Mensajes: 148
Antigüedad: 12 años, 1 mes
Puntos: 19
Respuesta: Problemas con Trigger

Muchas gracias, por tu ayuda! implementare tu idea a ver como resulta.

Etiquetas: function, trigger
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:44.