From: | Ricardo Fuentes Pereira <rfuentesp(at)gmail(dot)com> |
---|---|
To: | "'pgsql-es-ayuda(at)postgresql(dot)org'" <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Creacion de Trigger |
Date: | 2005-07-18 16:43:42 |
Message-ID: | 42DBDC3E.5000902@gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Hola lista.
Tengo el siguiente problema:
Tengo que crear un trigger de la siguiente tabla:
CREATE TABLE mensajes
(
cod_mje int4 NOT NULL,
rut_orig char(9) NOT NULL,
rut_dest char(9) NOT NULL,
fecha date,
mensaje varchar(255))
la cual almacena mensajes internos de un sistema.
Esta tabla tiene campos que referencian a quien fue el remitente del
mensaje (rut_orig) y a la persona destino del mismo (rut_dest).
Ademas tengo la siguiente tabla:
CREATE TABLE personas
(
rut char(9) NOT NULL,
email varchar(30),
...
)
donde se almacenan los datos de las personas (resumido).
Lo que deseo hacer es poder crear un trigger donde al ingresar una fila
a la tabla mensajes se obtenga los emails tanto del origen como del
destino para enviar una copia al mail de destino usando pgmail.
He aquí lo que llevo:
1.- Funcion que dado el rut me devuelve el email:
CREATE OR REPLACE FUNCTION selectemail(bpchar)
RETURNS "varchar" AS
'
DECLARE _rut ALIAS FOR $1;
DECLARE _email VARCHAR(30);
BEGIN
SELECT email INTO _email FROM personas WHERE rut = _rut;
RETURN _email;
END;
'
LANGUAGE 'plpgsql' VOLATILE;
la cual funciona sin problemas.
2.- Funcion para disparar por el trigger
CREATE OR REPLACE FUNCTION mensajes_email()
RETURNS "trigger" AS
'
DECLARE
_email_orig VARCHAR(30) := selectEmail(NEW.rut_orig);
_email_dest VARCHAR(30) := selectEmail(NEW.rut_dest);
_asunto VARCHAR(255) := NEW.mensaje;
_mensaje VARCHAR(255) := NEW.mensaje;
BEGIN
SELECT pgmail(_email_orig, _email_dest, _asunto, _mensaje); --
pgmail es una funcion en pltclu
RETURN NEW;
END;
'
3.- El trigger
CREATE TRIGGER mensajes_email BEFORE INSERT OR UPDATE ON mensajes FOR
EACH ROW EXECUTE PROCEDURE mensajes_email();
El problema que tengo es que al insertar una fila en mensajes aparece el
siguiente error:
NEW used in non-rule query
No se cual puede ser el problema. Ademas es mi primer trigger asi que
puede que este cometiendo algun error de inexperto.
Espero su ayuda.
Salu2.0.
From | Date | Subject | |
---|---|---|---|
Next Message | Alvaro Herrera | 2005-07-18 16:48:50 | Re: Creacion de Trigger |
Previous Message | Jaime Casanova | 2005-07-18 16:41:05 | Re: Metodos |