Ayuda con un Trigger

From: "Miguel" <mvillagomez(at)sayab(dot)com(dot)mx>
To: "Postgres" <pgsql-es-ayuda(at)postgresql(dot)org>
Cc: "Postgres" <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Ayuda con un Trigger
Date: 2006-08-18 18:02:20
Message-ID: 20060818180022.E82A09FB3F2@postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Qué tal tengo estas tablas.

CREATE TABLE empleado(id_empleado SERIAL NOT NULL UNIQUE, paterno varchar
NOT NULL, materno varchar, nombre varchar NOT NULL, ingreso date NOT NULL,
puesto varchar, sueldo_mensual float NOT NULL, activo boolean NOT NULL,
PRIMARY KEY(nombre, paterno, materno));

CREATE TABLE gastos_empleado(id_gasto SERIAL NOT NULL UNIQUE, no_poliza
integer NOT NULL UNIQUE, id_empleado integer NOT NULL references
empleado(id_empleado), fecha date NOT NULL, monto float NOT NULL,
id_proyecto integer NOT NULL references proyecto(id_proyecto), PRIMARY
KEY(no_poliza));

Y quiero crear un trigger que no me permita ingresar a un empleado que no
este activo en ese momento a la tabla gastos empleado, pero no se como
decirle a Postgres eso, este es mi trigger:

CREATE OR REPLACE FUNCTION empleado_activo() RETURNS TRIGGER AS $$

BEGIN

IF (NEW.id_empleado NOT IN (SELECT id_empleado FROM empleado WHERE
activo='TRUE') THEN

RAISE EXCEPTION 'No se puede meter un gasto para este empleado. Este no se
encuentra activo.';

END IF;

RETURN NULL;

END;

$$ LANGUAGE plpgsql;

CREATE TRIGGER empleado_activo BEFORE INSERT OR UPDATE ON gastos_empleado
FOR EACH ROW EXECUTE PROCEDURE empleado_activo();

Es la primera vez que hago un trigger así que comprendan que todavía no si
se el IF sea correcto; ya que postgres me manda este error:

ERROR: mismatched parentheses

CONTEXT: compile of PL/pgSQL function "empleado_activo" near line 2

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Rubén da Silva 2006-08-18 18:24:30 Re: Ayuda con un Trigger
Previous Message Espartano 2006-08-18 17:57:29 Re: Conexiones externas a V 8.1 en windows