我必须简单地将数据从一个表复制到动态生成的表中。我创建了触发器..
CREATE OR REPLACE FUNCTION historylogfunc() RETURNS TRIGGER AS $example_table$
DECLARE last_device_id text;
BEGIN
PERFORM last_device_id = device_id FROM company ORDER BY id DESC LIMIT 1;
INSERT INTO "device_id"(emp_id, entry_date, name) VALUES (new.id, current_timestamp, new.name);
RETURN NEW;
END;
$example_table$ LANGUAGE plpgsql;
PERFORM last_device_id = device_id FROM company ORDER BY id DESC LIMIT 1;
它将从表中选择最后device_id
并存储在var last device_id
中
假设device_id = dv001
,
我必须将数据从主表复制到新表,即dv001。
错误显示:关系" device_id"不存在。
请帮帮我......
答案 0 :(得分:0)
我发现你的功能存在两个问题:
PERFORM last_device_id = device_id FROM company ORDER BY id DESC LIMIT 1;
这与SELECT last_device_id = device_id FROM company ...;
相同,只是结果被丢弃。
所以这句话什么都不做,因为它没有副作用。这不是故意的。
SELECT last_device_id = device_id ...
的(已弃用)结果是比较运算符boolean
的{{1}}结果。那是你的意图吗?
=
这会导致错误消息,因为没有名为INSERT INTO "device_id"(emp_id, entry_date, name) VALUES (new.id, current_timestamp, new.name);
的表。你确定有这个名字的表吗?然后,如果它不在device_id
中,您可能必须使用模式名称对其进行限定。
但是search_path
看起来更像是列名而不是表名。
根据您的评论如下:
如果您希望将device_id
放入名称为INSERT
中最新device_id
条目的表中,则必须使用如下的动态SQL:
company