Triggers não executando o delete!!!

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
KATIA DIAS
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 25
Registrado em: Qui, 16 Mar 2006 8:48 pm
Localização: são PAULO

Boa tarde a todos!

Tenho estas triggers que funciona perfeitamente, inclusive o delete da trigger "TRG_PROCESSA" para apagar dados na temporária (TEMP_ID) ,
quando logada no banco oracle 21c.... Porém quando executo no 19c, não faz delete e nem dá erro. Já executei grant ao usuário, porém sem sucesso.
Alguém tem idéia do que possa ser?

Selecionar tudo

CREATE OR REPLACE TRIGGER TRG_PROCESSA_1
 AFTER INSERT ON CONTROLE
 REFERENCING NEW AS NEW OLD AS OLD
 FOR EACH ROW
DECLARE
 BEGIN   
         ---Guarda o id na temporária 
          INSERT INTO TEMP_ID
          VALUES(:NEW.id );
          
 EXCEPTION
  
    WHEN OTHERS THEN
         DBMS_OUTPUT.PUT_LINE('código erro: ' || SQLCODE);
         DBMS_OUTPUT.PUT_LINE('descrição erro: ' || SQLERRM);       

 END RG_PROCESSA_1;

Selecionar tudo

CREATE OR REPLACE TRIGGER TRG_PROCESSA2
 AFTER INSERT ON CONTROLE
 REFERENCING NEW AS NEW OLD AS OLD

declare
  --Declarando variáveis
  vtemp    varchar2(40);
 BEGIN
     -- Busca o Número do CPF para parâmetro para chamada da procedure ---
       SELECT a.dsc_json.num_cpf_cnpj 
           into vtemp
        FROM  ATUALIZACAO a
       WHERE a.id=(SELECT e.id  FROM temp_id e where e.id= a.id);

       -- chama uma procedure passando os dados inseridos pra procedure.
          PRC_ATUALIZA_DADOS(vtemp); 
 
    --Deleta a temporária a cada linha inserida na temp_id-----
      DELETE FROM temp_id;
      
 EXCEPTION
   
      WHEN OTHERS THEN
           DBMS_OUTPUT.PUT_LINE('código erro: ' || SQLCODE);
           DBMS_OUTPUT.PUT_LINE('descrição erro: ' || SQLERRM); 
 EN DTRG_PROCESSA2;
Obrigada!

Kátia
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Veja se a trigger ta ativa:

Selecionar tudo

SELECT status FROM ALL_TRIGGERS
WHERE trigger_name='TRG_PROCESSA2'; 
Veja também se o objeto está válido:

Selecionar tudo

SELECT status FROM all_objects
WHERE object_name='TRG_PROCESSA2'
KATIA DIAS
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 25
Registrado em: Qui, 16 Mar 2006 8:48 pm
Localização: são PAULO

Boa tarde dr_gori!

Obrigada por responder! Então, estão todas ativas e válidas! A única coisa estranha, é que quando logo no sql Developer (Oracle) 19c, o delete não funciona. Porém quando logada no TOAD 21c, funciona perfeitamente o delete na chamada da triggers.....
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Pelo que eu estou vendo, você tem duas triggers AFTER INSERT para a mesma tabela. Talvez a segunda esteja sendo executada antes da primeira.
Normalmente se coloca tudo na mesma trigger.
Mas caso seja necessário colocar em diferentes triggers, é possível definir a ordem de execução das triggers com as cláusulas FOLLOWS e PRECEDES.

Selecionar tudo

CREATE OR REPLACE TRIGGER TRG_PROCESSA_1
 AFTER INSERT ON CONTROLE
 REFERENCING NEW AS NEW OLD AS OLD
 FOR EACH ROW
 PRECEDES TRG_PROCESSA2    ---- <================ HERE!!!!
DECLARE
.
.
.
Aí você pode consultar a ordem com essa query:

Selecionar tudo

select
  trigger_owner,
  trigger_name,
  referenced_trigger_owner,
  referenced_trigger_name,
  ordering_type
from
  all_trigger_ordering;
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 6 visitantes