过程和触发器 postgresql 添加一个条件,只在一行而不是全部
procedure & trigger postgresql add a condition doing it on only one line not all
首先我创建了一个触发器及其过程,但是过程在 if 部分缺少一个子语句
create trigger a_financereconnomiser after update of prix_reel on a_financer execute procedure payetoeconomie() ;
当前的程序是:
create or replace function payetoeconomie() returns trigger as $$
begin
if (select prix_estim-prix_reel from a_financer) >= 1 then
insert into economie (ref,designation,economie ) select ref*1000,date,objet,prix_estim-prix_reel from a_financer where prix_reel ;
end if ;
end $$
language 'plpgsql' ;
如果我在此处尝试使用它,psql 会回答函数 returns 多于一个独特的行
这似乎符合逻辑
所以我需要在列上添加一个“并且该列在更新期间已更改”
prix_reel。这是我在程序中不明白如何做的事情。
信息表的构建方式如下:
来源一:
ref | integer | | not null | | plain | |
date | date | | | | plain | |
dl | date | | | | plain | |
prix_estim | integer | | | | plain | |
prix_reel | double precision | | | | plain | |
paye | integer | | | | plain | |
objet | text | | | | extended | |
besoin | integer | | | | plain | |
目的地一为:
ref | integer | | not null | | plain | |
date | date | | | | plain | |
designation | text | | | | extended | |
economie | double precision | | | | plain | |
commentaire | text | | | | extended | |
你应该知道触发函数和普通函数的区别。
在任何触发器中,您都应该利用 NEW 和 OLD 变量。两者都是记录变量。在更新触发器的情况下,NEW 变量是当前修改的记录,OLD 变量是更新前的原始记录。
更新触发器通常应该 return 新变量。
我猜你希望触发函数看起来像这样:
create or replace function payetoeconomie() returns trigger as $$
DECLARE
ec double precision;
begin
ec = NEW.prix_estim - NEW.prix_reel;
IF ec >= 1 THEN
insert into economie (ref,designation,economie) VALUES (NEW.ref*1000, NEW.objet, ec);
END IF;
RETURN NEW;
end $$
language 'plpgsql' ;
首先我创建了一个触发器及其过程,但是过程在 if 部分缺少一个子语句
create trigger a_financereconnomiser after update of prix_reel on a_financer execute procedure payetoeconomie() ;
当前的程序是:
create or replace function payetoeconomie() returns trigger as $$
begin
if (select prix_estim-prix_reel from a_financer) >= 1 then
insert into economie (ref,designation,economie ) select ref*1000,date,objet,prix_estim-prix_reel from a_financer where prix_reel ;
end if ;
end $$
language 'plpgsql' ;
如果我在此处尝试使用它,psql 会回答函数 returns 多于一个独特的行 这似乎符合逻辑
所以我需要在列上添加一个“并且该列在更新期间已更改” prix_reel。这是我在程序中不明白如何做的事情。
信息表的构建方式如下:
来源一:
ref | integer | | not null | | plain | |
date | date | | | | plain | |
dl | date | | | | plain | |
prix_estim | integer | | | | plain | |
prix_reel | double precision | | | | plain | |
paye | integer | | | | plain | |
objet | text | | | | extended | |
besoin | integer | | | | plain | |
目的地一为:
ref | integer | | not null | | plain | |
date | date | | | | plain | |
designation | text | | | | extended | |
economie | double precision | | | | plain | |
commentaire | text | | | | extended | |
你应该知道触发函数和普通函数的区别。 在任何触发器中,您都应该利用 NEW 和 OLD 变量。两者都是记录变量。在更新触发器的情况下,NEW 变量是当前修改的记录,OLD 变量是更新前的原始记录。 更新触发器通常应该 return 新变量。
我猜你希望触发函数看起来像这样:
create or replace function payetoeconomie() returns trigger as $$
DECLARE
ec double precision;
begin
ec = NEW.prix_estim - NEW.prix_reel;
IF ec >= 1 THEN
insert into economie (ref,designation,economie) VALUES (NEW.ref*1000, NEW.objet, ec);
END IF;
RETURN NEW;
end $$
language 'plpgsql' ;