我正在尝试编写一个函数来检查关系中新条目中的日期是否大于其他关系中的条目。如果是这样,我希望将我的新关系中的日期值更新为另一关系中的日期值:
create or replace function curDate()
returns trigger as $$
Begin
if (new.date >= (select date from other where new.name = other.name )) then
set new.date = (select date from playlist where new.name = other.name );
end if;
end; $$ language plpgsql;
我在set new.date = (select date from playlist where new.name = other.name )
处遇到了语法错误。
然而,下面的代码可以正常运行:
create or replace function curDate()
returns trigger as $$
declare dateVar date;
Begin
dateVar := (select date from other where new.name = other.name);
if (new.datum >= dateVar) then
new.datum = dateVar;
end if;
end; $$ language plpgsql;
为什么会这样呢?
set
在 plpgsql 的赋值语句中是多余的。顺便说一下,该函数应该return new;
。 - klindate
还是datum
?所有涉及的列都定义为NOT NULL
和other.name
为UNIQUE
吗? - Erwin Brandstetter