我在我的程序中遇到了这个功能的问题。
该函数的目的是实现一个触发器,该触发器检查用户 (utente) 的帐户 (saldo) 是否有足够的钱,以便将自己添加到乘车 (boleia)。
我可以从我的函数的行为中收集到用户(Utente)和乘车(Boleia),但他们的属性,特别是他的余额(saldo)没有被正确访问。这是因为每次我尝试将用户添加到行程中时,都会抛出异常“O Utente não tem saldo suficiente”,这意味着用户没有足够的钱。
我想不出我可能做错了什么。Utente 和 Boleia 表都被正确插入,每个属性也被插入,但我似乎无法在我的函数中访问它们。
这是函数的代码:
create or replace function assocpass_trigger_proc() returns trigger
as $$
declare
x record;
y record;
balancetemp numeric;
begin
select into x * from Utente where(nick=new.nick_passenger);
select into y * from Boleia
where(nick=new.nick_planner and date_time=new.date_time);
select x.balance into balancetemp;
if(found and (balancetemp>=y.cost_passenger)) then
update Utente set balance = balancetemp-y.cost_passenger
where Utente.nick = new.nick_passenger;
insert into InscricaoP(nick_passenger,nick_planner,data_hora)
values(new.nick_passenger, new.nick_planner, new.date_time);
elseif(found and (x.saldo<y.custo_passageiro)) then
raise exception 'O Utente não tem saldo suficiente';
else
raise exception 'A Boleia não existe';
end if;
end
$$ language plpgsql;
这是关系的插入:
insert into InscricaoP(nick_planner,date_time,nick_passenger)
values('zero','15/06','cinco');
nick_planner 和 nick_passenger 都来自“user”(Utilizador)实体 Date_time,cost_passenger 来自“ride”(Boleia)实体。