我有两个表:table1
和table2
,它们在插入和同一函数的更新时触发。
当您在table1
或table2
中插入值时,会在table3
中插入一个值,并将值table1.lastname || table1.firstname
分配给column3
。必须将id
中插入的table3
插入table1.id_table3
。
CREATE OR REPLACE FUNCTION myschema.myfunction() RETURNS trigger AS
$BODY$
DECLARE
new_id_table_4 integer;
BEGIN
IF TG_OP = 'INSERT' THEN
IF TG_TABLE_NAME = 'table1' THEN
new_id_table_4 := 1;
ELSIF TG_TABLE_NAME = 'table2' THEN
new_id_table_4 := 2;
END IF;
INSERT INTO myschema.table3
(id, id_table4, name)
VALUES (DEFAULT, new_id_table_4, NEW.columnA||', '||NEW.columnB, TRUE, TRUE)
RETURNING id
INTO NEW.id_table3;
ELSIF TG_OP = 'UPDATE' THEN
IF OLD.columnA <> NEW.columnA OR OLD.columnB <> NEW.columnB THEN
UPDATE myschema.table3 SET
name = NEW.columnA||', '||NEW.columnB
WHERE id = NEW.id_cuenta;
END IF;
END IF;
RETURN NEW;
END
$BODY$
LANGUAGE plpgsql VOLATILE COST 100;
ALTER FUNCTION myschema.myfunction() OWNER TO myuser;
CREATE TRIGGER add_table3record_table1
AFTER INSERT OR UPDATE
ON myschema.table1
FOR EACH ROW
EXECUTE PROCEDURE myschema.myfunction();
CREATE TRIGGER add_table3record_table2
AFTER INSERT OR UPDATE
ON myschema.table2
FOR EACH ROW
EXECUTE PROCEDURE myschema.myfunction();
问题在于,当我将新记录插入table1
或table2
时,
...RETURNING id INTO NEW.id_table3;
它似乎没有任何效果。 这是我的第一个函数/触发器,我找不到错误。 谢谢!
答案 0 :(得分:4)
我非常确定只有设置NEW.foo = bar
后才能更新已插入的行。
或者:
table1
设置新的id_table3
值进行更新(将以递归方式调用您的ON UPDATE触发器,所以要小心)或根据您在table1
和table3
之间设置外键的方式,后者可能是也可能不是。