Postgresql 在触发器中使用光标
我试图编写一个触发器函数,在执行插入时执行。条件是,如果id已经存在,那么创建时间现在应该是死亡时间Postgresql 在触发器中使用光标,postgresql,Postgresql,我试图编写一个触发器函数,在执行插入时执行。条件是,如果id已经存在,那么创建时间现在应该是死亡时间 CREATE function archive_temp() returns trigger as ' begin insert into temporary_archive values ( OLD.id, OLD.time_create, OLD.time_dead, OLD.fname, current_user, now(),
CREATE function archive_temp() returns trigger as '
begin
insert into temporary_archive
values
(
OLD.id,
OLD.time_create,
OLD.time_dead,
OLD.fname,
current_user,
now(),
now(),
TG_OP
);
return null;
end;
' LANGUAGE 'plpgsql';
-----------------------------
CREATE TRIGGER archive_temps
AFTER DELETE OR UPDATE
on temporary_object
FOR EACH ROW
DECLARE
temporary_archive temporary_object.id%type;
begin
if inserting then
select id into temporary_archive
from temporary_object
where id = :old.id;
if temporary_archive is not null then
EXECUTE PROCEDURE archive_temps();
end if;
end if;ins
在我看来,从你的例子来看,你正在试图用甲骨文的方式做事。PostgreSQL则不同。我也没有看到在你的代码中任何地方使用游标,所以这个问题可能会误导你
在PostgreSQL中,触发器只能调用过程,并且过程必须基本上是自包含的。本质上,您将不得不对代码进行一些重构。每行
之后唯一可接受的语法是executeprocedure
,因此您的其他逻辑必须移动到用户定义的函数中。如果需要,可以通过调用函数(如果函数返回bool)在WHEN
条件下应用函数。或者,您可以将其构建到触发器逻辑中。我该怎么做?那代码是我能做到的,难道没有人知道怎么做吗?