Tengo un disparador:
CREATE OR REPLACE FUNCTION process_fillDerivedFromGenby() RETURNS TRIGGER AS $fillDerivedFromgenby$ DECLARE prog varchar(255); curent varchar(255); BEGIN SELECT u.iduseentity ,g.idCreatedEntity into prog,curent FROM entity e JOIN used u ON e.identity=u.iduseentity JOIN activity a ON a.idactivity=u.idusedactivity JOIN generatedby g ON g.idcreatoractivity=a.idactivity WHERE g.idCreatedEntity =NEW.idCreatedEntity; --raise notice 'curent: "%" prog by "%"', curent, prog; INSERT INTO DERIVEDFROM VALUES(prog,curent); return new; END; $fillDerivedFromgenby$ LANGUAGE plpgsql; CREATE TRIGGER fillDerivedFromgenby AFTER INSERT ON GENERATEDBY FOR EACH ROW EXECUTE PROCEDURE process_fillDerivedFromGenby();Funciona bien, pero si mi selección devuelve 3 líneas, mi disparador solo insertará el último valor de mi selección en lugar de las 3 líneas. He intentado hacer un bucle con un "for" pero no funciona.
Alguna sugerencia ?
Ya di la respuesta en tu otra pregunta . Irónicamente, la pregunta no es un duplicado, pero la respuesta sí.
Esto insertará todas las filas sin pasar por las variables:
CREATE OR REPLACE FUNCTION process_fillDerivedFrom_used() RETURNS TRIGGER AS $fillDerivedFrom_used$ BEGIN INSERT INTO DERIVEDFROM (prog, current) -- or whatever the column names are SELECT u.iduseentity as prog, g.idCreatedEntity as current FROM entity e JOIN used u ON e.identity = u.iduseentity JOIN activity a ON a.idactivity = u.idusedactivity JOIN generatedby g ON g.idcreatoractivity = a.idactivity; END;Pon el "orden por desc" y "límite 1".
SELECT u.iduseentity ,g.idCreatedEntity into prog,curent FROM entity e JOIN used u ON e.identity=u.iduseentity JOIN activity a ON a.idactivity=u.idusedactivity JOIN generatedby g ON g.idcreatoractivity=a.idactivity WHERE g.idCreatedEntity =NEW.idCreatedEntityORDEN POR u.iduseentity DESC LIMIT 1;