Pular para o conteúdo

Fóruns SQL e PL/SQL Trigger Só Executa Primeiro Bloco do Programa Trigger Só Executa Primeiro Bloco do Programa

#92291
Girino
Participante

    Olá fsitja e Amigos do Fórum
    Bom Dia à Todos..!! 8)

    Estou tentando fazer conforme passado aqui no fórum, criando 1 package e 3 triggers.
    Só que não estou conseguindo fazer rodar e ainda por cima a tabela (PCWMSOUTPUT) fica locada.
    Alguém poderia dar uma olhada e verificar onde continuo errando.

    Desde já muito obrigado..!!


    Package:

    CREATE OR REPLACE PACKAGE pack_estado_tab_1 IS
    type t_nt_tabela_1 is table of PCWMSOUTPUT%rowtype;
    nt_tab_1 t_nt_tabela_1 := t_nt_tabela_1(null);
    END;


    Trigger_1:

    CREATE OR REPLACE TRIGGER T_PRIMEIRA
    AFTER INSERT ON PCWMSOUTPUT FOR EACH ROW
    DECLARE
    v_rec_tab_1 PCWMSOUTPUT%rowtype;

    BEGIN
    pack_estado_tab_1.nt_tab_1.extend;
    v_rec_tab_1.tipo := :new.tipo;
    v_rec_tab_1.numero := :new.numero;
    v_rec_tab_1.codprod := :new.codprod;
    v_rec_tab_1.codcli := :new.codcli;
    v_rec_tab_1.codfornec := :new.codfornec;
    v_rec_tab_1.codfilial := :new.codfilial;
    v_rec_tab_1.qtsep := :new.qtsep;
    v_rec_tab_1.qtrec := :new.qtrec;
    v_rec_tab_1.qtava := :new.qtava;
    v_rec_tab_1.qtcor := :new.qtcor;
    v_rec_tab_1.dtemissao := :new.dtemissao;
    v_rec_tab_1.semaforo := 3;
    v_rec_tab_1.dtprocessamento := :new.dtprocessamento;
    v_rec_tab_1.numlote := :new.numlote;
    v_rec_tab_1.dtfabricacao := :new.dtfabricacao;

     pack_estado_tab_1.nt_tab_1(pack_estado_tab_1.nt_tab_1.last) := v_rec_tab_1;
    

    END;


    Trigger_2:

    CREATE OR REPLACE TRIGGER T_SEGUNDA
    AFTER INSERT ON PCWMSOUTPUT
    BEGIN
    pack_estado_tab_1.nt_tab_1.delete;
    END;


    Trigger_3:

    CREATE OR REPLACE TRIGGER T_TERCEIRA
    AFTER INSERT ON PCWMSOUTPUT

    BEGIN
    FOR i IN 1 .. pack_estado_tab_1.nt_tab_1.count
    LOOP

      INSERT INTO "sh_pcwmsoutput"@logixteste 
            VALUES ( pack_estado_tab_1.nt_tab_1(i).tipo,              pack_estado_tab_1.nt_tab_1(i).numero,
                     pack_estado_tab_1.nt_tab_1(i).codprod,           pack_estado_tab_1.nt_tab_1(i).codcli,
                     pack_estado_tab_1.nt_tab_1(i).codfornec,         pack_estado_tab_1.nt_tab_1(i).codfilial,
                     pack_estado_tab_1.nt_tab_1(i).qtsep,             pack_estado_tab_1.nt_tab_1(i).qtrec,
                     pack_estado_tab_1.nt_tab_1(i).qtava,             pack_estado_tab_1.nt_tab_1(i).qtcor,
                     pack_estado_tab_1.nt_tab_1(i).dtemissao,         pack_estado_tab_1.nt_tab_1(i).semaforo,
                     pack_estado_tab_1.nt_tab_1(i).dtprocessamento,   pack_estado_tab_1.nt_tab_1(i).numlote,
                     pack_estado_tab_1.nt_tab_1(i).dtfabricacao,      0);
    
    
       UPDATE PCWMSOUTPUT
          SET SEMAFORO = 3
        WHERE numero = pack_estado_tab_1.nt_tab_1(i).numero;
     END LOOP;
    

    END;