过程和触发器 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' ;