触发器 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
).
所以。我尝试触发更新质量药物(我从 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
).