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
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 |