27.10.11

Ejercicio Giro Bancario (Trigger)

create or replace trigger trCuentaBancaria
after insert
on giro
for each row
declare
saldoCuenta cuenta.saldo%type;
saldoLinea lineaCredito.saldo%type;
vIdLinea lineaCredito.idLinea%type;
vLineaUsada integer;

begin
 select saldo, idLinea into saldoLinea, vIdLinea
 from lineaCredito where idCuenta = :new.idCuenta;
     if :new.monto> saldoCuenta + saldoLinea then
            dbms_output.put_line('No hay plata !');
     else
           if :new.monto <= saldoCuenta then

           update cuenta
           set Saldo = saldo - :new.monto
           where idCuenta = :new.idCuenta;
else

             update cuenta
             set Saldo = 0
             where idCuenta = :new.idCuenta and
             vLineaUsada = :new.monto - saldoCuenta;

             update lineaCredito
             set saldo = saldo - vLineaUsada
             where idCuenta = :new.idCuenta;

             insert into UsoLinea (idUso,idLinea,fecha,monto)
values(:new.idGiro,vIdLinea,
sysdate,vLineaUsada);


end if;
end if;
end;