Creacion de Trigger

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.

Responses

Browse pgsql-es-ayuda by date

  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