2017-04-25 72 views
0

我有一个触发器:插入多行与触发:在PostgreSQL

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(); 

它的做工精细,但如果我选择返回3行了扳机只会插入我选择的最后一个值,而不是3行。我试图做一个“for”的循环,但它不起作用。

有什么建议吗?

回答

1

我已经在您的other question中提供了答案。具有讽刺意味的是,问题并不重复,但答案是。

这将插入所有的行,而不通过变量会:

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; 
+0

对不起,我上次不明白。但是,这是工作,非常感谢! –

0

“的递减顺序”和“限制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.idCreatedEntity 

ORDER BY u.iduseentity DESC LIMIT 1;

+0

感谢您的帮助! –