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

问题描述 投票:1回答:1

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

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

ref_number|app_ref
            1234
            2345

我已经google了,我知道我需要使用一个触发器,但我从来没有使用过触发器/构建的一个(学习PostgreSQL)所以我不确定是否已经读过PostgreSQL site,触发器会在之前还是之后运行?

sql postgresql moodle
1个回答
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;
© www.soinside.com 2019 - 2024. All rights reserved.