使用视图上的触发器使用来自另一列的数据更新现有列
Update an existing column with data from another using a trigger on a view
我有一个查询,我 运行 从多个表中提取数据,这些表是问卷调查插件 Moodle 的一部分。
这returns一个观点。 (将此视图与另一个视图合并以进行 php 搜索)
我想要的是 app_ref
列,其中插入了一个参考编号,以复制到同一视图中的另一列 ref_number
。
ref_number|app_ref
1234
2345
我用谷歌搜索了一下,我知道我需要使用触发器,但我从未使用过 trigger/constructed 触发器(学习 PostgreSQL),所以我不确定是否已阅读 PostgreSQL site,触发器 运行 之前还是之后?
如果我没理解错的话,您想更新一个不是更新的视图table,因为它从多个table 中进行选择。
首先,您可以编写一个程序来执行您想要的更新:
CREATE OR REPLACE FUNCTION my_view_update()
RETURNS trigger AS
$BODY$
BEGIN
-- Here comes your SQL to handle your ref_number and app_ref issue
-- use NEW.app_ref or OLD.app_ref to access values
RETURN NEW;
END
$BODY$
然后您可以告诉视图执行您的函数而不是像这样 "update":
CREATE TRIGGER my_update
INSTEAD OF UPDATE
ON my_view
FOR EACH ROW
EXECUTE PROCEDURE my_view_update;
我有一个查询,我 运行 从多个表中提取数据,这些表是问卷调查插件 Moodle 的一部分。
这returns一个观点。 (将此视图与另一个视图合并以进行 php 搜索)
我想要的是 app_ref
列,其中插入了一个参考编号,以复制到同一视图中的另一列 ref_number
。
ref_number|app_ref
1234
2345
我用谷歌搜索了一下,我知道我需要使用触发器,但我从未使用过 trigger/constructed 触发器(学习 PostgreSQL),所以我不确定是否已阅读 PostgreSQL site,触发器 运行 之前还是之后?
如果我没理解错的话,您想更新一个不是更新的视图table,因为它从多个table 中进行选择。
首先,您可以编写一个程序来执行您想要的更新:
CREATE OR REPLACE FUNCTION my_view_update()
RETURNS trigger AS
$BODY$
BEGIN
-- Here comes your SQL to handle your ref_number and app_ref issue
-- use NEW.app_ref or OLD.app_ref to access values
RETURN NEW;
END
$BODY$
然后您可以告诉视图执行您的函数而不是像这样 "update":
CREATE TRIGGER my_update
INSTEAD OF UPDATE
ON my_view
FOR EACH ROW
EXECUTE PROCEDURE my_view_update;