Postgresql ve pgadmin kullanıyorum ve bu konuda yeniyim. Aşağıdaki sütunlara sahip bir "Kullanıcılar" tablosu var (Username, Name, Email, Phone, Discount, Password, token, serial, created_on, updated_on, points, reference)
.
Tablo için bir tetikleyici oluşturmaya çalışıyordum, böylece referans alanındaki mevcut bir kullanıcı adıyla her yeni ekleme gerçekleştiğinde, kullanılan kullanıcı adının noktaları 50 artırılacak. Yani iki işlem var-mevcut tabloyu güncellemek, yeni değerleri eklemek.
Bunun gibi bir tetikleyici işlevi oluşturmayı denedim:
create or replace function points()
returns trigger as
$BODY$
BEGIN
if
new."Users"."reference" in (old."Users"."username")
then
Insert into "Users"(Username,Name,Email,Phone,Discount,Password,token,serial,created_on,updated_on,points,reference)
values(new.Username,new.Name,new.Email,new.Phone,new.Discount,new.Password,new.token,new.serial,new.created_on,new.updated_on,new.points,new.reference);
update "Users"
set old."Users"."points" = old."Users"."points" + 50
where "Users"."username" = (select "Users"."username" from "Users" where new."Users"."reference" in (old."Users"."username"));
end if;
RETURN new;
END;
$BODY$
language plpgsql;
ve bunun gibi bir tetikleyici:
create trigger referece_points
after insert
on "Users"
for each row
execute procedure points();
Ancak "Kullanıcılar" tablosuna yeni bir değer eklemeye çalıştığımda aşağıdaki hatayı alıyorum:
ERROR: missing FROM-clause entry for table "Users" LINE 1: SELECT new."Users"."reference" in (old."Users"."username") ^ Query: SELECT new."Users"."reference" in (old."Users"."username") CONTEXT: PL/pgSQL function points() line 2 at IF