dejare unos ejemplos a continuacion que seran de utilidad.
ejemplo base:
este trigger basicamente realiza una insercion en una tabla ANTES de insertar en la que se pretende realizar una insersion, o sea al tratar de insertar en la tabla LIBRO se inserta en la tabla MATERIAL .
CREATE OR REPLACE FUNCTION insertlibro() RETURNS trigger AS $insertlibro$
BEGIN
IF (TG_OP = 'INSERT') THEN
INSERT INTO material (cod_tipo_prestamo, material_titulo, material__contenido)
VALUES (new.cod_tipo_prestamo, new.material_titulo, new.material__contenido);
NEW.cod_material := currval('material_cod_material_seq');-- esto va solo si el PK de su tabla es un serial
RETURN NEW;
ELSIF (TG_OP ='UPDATE') THEN
UPDATE material SET cod_tipo_prestao = new.cod_tipo_prestamo, material_titulo = new.material_titulo,material__contenido = new.material__contenido
WHERE cod_material = new.cod_material;
RAISE NOTICE 'NUEVO NOMBRE: %', NEW.USUARIO_NOMBRE;
RETURN NEW;
END IF;
END;
$insertlibro$ LANGUAGE 'plpgsql';
CREATE TRIGGER insertarLibro BEFORE INSERT OR UPDATE ON libro
FOR EACH ROW EXECUTE PROCEDURE insertlibro ();
ejemplo con loop:
este trigger basicamente realiza una insercion multiple en una tabla DESPUES de insertar en la tabla LIBRO .Se insertan varios ejemplares de libro en la tabla EJEMPLARES.
CREATE OR REPLACE FUNCTION insertarEjemplar ()RETURNS TRIGGER AS $W$
DECLARE
cont int := 0;
BEGIN
LOOP /* inicia loop*/
cont := cont + 1;
INSERT INTO ejemplar(cod_material, ejemplar_estado, ejemplar_numero_identificador)
VALUES (new.cod_material,FALSE,cont);
IF cont = NEW.libro_numero_ejemplares THEN
EXIT;/* finaliza loop solo si se cumple la condicion*/
END IF;
END LOOP;
RETURN NEW;
END;
$W$ LANGUAGE 'plpgsql';
CREATE TRIGGER insertarEjemplares AFTER INSERT ON libro
FOR EACH ROW EXECUTE PROCEDURE insertarEjemplar();
dejare la foto del modelo fisico de datos sobre el cual se estan trabajando estos triggers para su mejor comprension:

2 comentarios:
buen post, me ayudo bastante
gracias por estos post en internet, me ha ayudado a saber donde poner los RETURN
Publicar un comentario