触发器 postgreSQL

Trigger postgreSQL

所以。我尝试触发更新质量药物(我从 delivery.quality 中获取质量并放入 medicaments.quality)

create or replace function addedmed()
returns trigger
language plpgsql
as
$$
begin
update medicaments set medicaments.quality = delivery.quality + medicaments.quality
where medicaments.id_med = delivery.id_med_del;
end;
$$;

然后 - 我尝试将数据插入交付

insert into delivery(id_del,id_provider,date_of_get,id_worker_del,id_med_del,quality)
values (default, 3 , current_timestamp ,1 ,6 ,10);

然后我有一个例外 -

ЗАПРОС:  update medicaments set medicaments.quality = delivery.quality + medicaments.quality
where medicaments.id_med = delivery.id_med_del
КОНТЕКСТ:  PL/pgSQL function addedmed() line 3 at SQL statement

所以,请帮助我,因为我不知道如何解决它

这不是有效的触发器功能代码。如果要引用插入到 delivery 中的行,则使用伪 table new,而不是 delivery.

create or replace function addedmed()
returns trigger
language plpgsql
as $$
begin
    update medicaments set quality = quality + new.quality where id_med = new.id_med_del;
    return new;
end;
$$;

请注意,触发器 return 是新记录。然后您可以按如下方式实际创建触发器:

create trigger trg_addedmed
    before insert on delivery
    for each row
    execute addedmed()
;

我定义了一个 before insert 触发器,如果​​您愿意,可以将其更改为 after insert(在这种情况下,您可以 return null 而不是 new).