sql—使用过程更新表a中的列2,方法是检查表b中的列中是否存在列1值[postgresql]

j9per5c4  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(308)

我有两张table如下:
表a:名称、id、值
表b:id、标题 TableA.value 取决于 TableA.ID 存在于 TableB.ID .
我正在尝试创建一个程序和触发器,以便 TableB 修改后,将触发该过程以检查 TableA.IDTableB.ID 和集合 TableA.value 到10。
我正在使用以下代码并得到一个错误:

CREATE PROCEDURE update1
LANGUAGE SQL
AS $$
UPDATE tablA as a
SET a.value = 10
WHERE a.ID EXISTS ( SELECT b.ID 
                            FROM tableB as b
                           WHERE a.ID = b.ID)
$$;

我是一个SQLNoob,这是我第一次尝试使用过程。
更新
我可以创建一个过程,当我使用 CALL 但是,它没有 RETURNS TRIGGER 在里面堵住。添加返回错误的过程不能返回触发器。
如果我创建一个触发器如下

CREATE TRIGGER b_trigger
AFTER UPDATE OR INSERT ON b.ID
FOR EACH STATEMENT
EXECUTE PROCEDURE update1();

但是,这将返回以下结果
错误:函数columbia\u deli.manager\u discount必须返回类型触发器
sql状态:42p17

mccptt67

mccptt671#

用这个试试 plpgsql 语言:
触发功能:

CREATE OR REPLACE FUNCTION update1()
  RETURNS trigger AS
$BODY$

begin
update "TableA" set value= 10 where id =new.id;

return NEW;
end;

$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;

然后在上创建触发器 TableB 为了 after update 事件

CREATE TRIGGER trig_tableb
  AFTER UPDATE
  ON "TableB"
  FOR EACH ROW
  EXECUTE PROCEDURE update1();

相关问题