Forum Stats

  • 3,827,736 Users
  • 2,260,814 Discussions
  • 7,897,363 Comments

Discussions

Help with this TRIGGER

AlfonsoAlmonte
AlfonsoAlmonte Member Posts: 32
edited Jun 22, 2015 11:33PM in SQL & PL/SQL

I try to insert a register by the trigger show me this message

Pantallazo.png

CREATE OR REPLACE TRIGGER tr_insupd_cuotas

AFTER INSERT ON Recibo_Cobros

  FOR EACH ROW

DECLARE v_transaccionid NUMBER;

  v_cuotaid          NUMBER;

  v_fecha            DATE;

  v_fechacuota       DATE;

  v_fechacobro       DATE;

  v_cantidadplazo    NUMBER;

  v_plazoavencer     NUMBER;

  v_cobrado          NUMBER(18,4);

  v_fechatransaccion DATE;

  v_montocuota       NUMBER(18,4);

  v_montotransaccion NUMBER;

  v_metodoplazos     CHAR(1);

  v_saldocuota       NUMBER(18,4);

  v_cuotapagada      CHAR(1);

  v_capitalcobrado   NUMBER(18,4);

  v_mensual          NUMBER := 1;

  v_diasmes          NUMBER;

  v_montocobrado     NUMBER(18,4):= :new.monto;

  CURSOR c_transacciones

  IS

    SELECT t.transaccionid,

      c.cuotaid,

      c.fechacuota,

      c.saldocuota,

      t.cantidadplazo,

      c.cuotapagada,

      t.metodoplazos,

      t.fecha,

      t.monto,

      t.plazoavencer,

      t.capitalcobrado

    FROM transacciones t

    JOIN cuotas c

    ON (c.transaccionid = t.transaccionid)

    WHERE c.cuotapagada = 'F';

  CURSOR c_cuotas

  IS

    SELECT SUM(montocuota) as montocuota

    FROM cuotas

    WHERE transaccionid = :new.transaccionid

    AND cuotapagada = 'F'

    GROUP BY transaccionid;

BEGIN

  FOR transaccion IN c_transacciones

  LOOP

    v_transaccionid    := transaccion.transaccionid;

    v_cuotaid          := transaccion.cuotaid;

    v_fechacuota       := transaccion.fechacuota;

    v_cantidadplazo    := transaccion.cantidadplazo;

    v_saldocuota       := transaccion.saldocuota;

    v_cuotapagada      := transaccion.cuotapagada;

    v_metodoplazos     := transaccion.metodoplazos;

    v_fecha            := transaccion.fecha;

    v_montotransaccion := transaccion.monto;

    v_plazoavencer     := transaccion.plazoavencer;

    v_capitalcobrado   := transaccion.capitalcobrado;

   

    BEGIN

      IF (v_metodoplazos = 'M') THEN

      FOR cuota IN c_cuotas

      LOOP

        v_montocuota    := cuota.montocuota;

       

        BEGIN

          WHILE (v_montocobrado >= v_montocuota)

          LOOP

            BEGIN

              v_diasmes := to_number(to_char(LAST_DAY(SYSDATE), 'DD'));

              v_saldocuota := v_montocuota;

              v_montocuota :=  v_montocobrado - v_montocuota;

              v_cuotapagada := 'T';

              v_fecha := add_months(v_fecha, v_mensual);

              v_plazoavencer := v_plazoavencer + v_diasmes;

              IF (v_plazoavencer > v_cantidadplazo) THEN

                BEGIN

                  v_plazoavencer := v_cantidadplazo;

                END;

              END IF;

              IF ((v_plazoavencer = v_cantidadplazo) and (v_montocuota = 0)) THEN

                    BEGIN

                      IF (v_capitalcobrado >= 0) THEN

                        BEGIN

                          v_capitalcobrado := v_capitalcobrado + v_montocobrado;

                        END;

                      END IF;

                    END;

                  END IF;

            END;

            UPDATE cuotas

              SET saldocuota = v_saldocuota,

                  cuotapagada = v_cuotapagada

            WHERE transaccionid = v_transaccionid;

           

            UPDATE transacciones

              SET fecha = v_fecha,

                  plazoavencer = v_plazoavencer,

                  capitalcobrado = v_capitalcobrado

            WHERE transaccionid = v_transaccionid;

          END LOOP;

        END;

      END LOOP;

      END IF;

    END;

  END LOOP;

END tr_insupd_cuotas;

Tagged:

Answers

This discussion has been closed.