プログラムでこの機能に問題があります。
この関数の目的は、ユーザー(utente)が自分のアカウント(saldo)に十分なお金を持っているかどうかをチェックして、自分をライド(boleia)に追加するトリガーを実装することです。
関数の動作から収集できるものは、ユーザー(Utente)とライド(Boleia)の両方が見つかりましたが、それらの属性、特に彼のバランス(saldo)が正しくアクセスされていません。これは、ユーザーをライドに追加しようとするたびに、「OUtentenãotemsaldusuficiente」という例外が発生するためです。これは、ユーザーに十分なお金がないことを意味します。
私は自分が間違っているかもしれないことは何も考えられません。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)エンティティから取得されます。