使用视图上的触发器使用另一个数据更新现有列

时间:2017-12-17 11:53:22

标签: sql postgresql moodle

我有一个查询,我运行从多个表中提取数据,这些表是问卷调查插件Moodle的一部分。

这会返回一个视图。 (将此视图加入另一个用于php搜索) 我想要的是一个列app_ref,其中插入了一个引号,以便在同一视图中复制到另一列ref_number

ref_number|app_ref
            1234
            2345

我已经google了,我知道我需要使用触发器,但我从未使用过触发器/构建的触发器(学习PostgreSQL),因此我不确定是否已阅读PostgreSQL site,是触发器是在BEFORE之前还是之后运行?

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您希望更新不可更新的视图,因为它从多个表中进行选择。

首先,您可以编写一个执行所需更新的过程:

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$

然后,您可以告诉视图执行您的功能而不是"更新"像这样:

CREATE TRIGGER my_update 
  INSTEAD OF UPDATE
  ON my_view
  FOR EACH ROW
  EXECUTE PROCEDURE my_view_update;