Trigger com chamada de procedure

问题描述 投票:0回答:0

Estudos sobre TRIGGER e PROCEDURES OBS: Sou iniciante Necessito fazer um update em uma tabela

Meu problema é que minha tabela possui uma trigger que no after insert pega um valor e faz uma conta para obter um novo dado, este dado necessito gravar em um dos campos da mesma tabela.

原理 criei um problema de tabela mutante

Resolvi fazer a trigger com AFTER INSERT e nela fazer a conta que preciso,e em seguida fazer uma chamada de procedure para realizar o update do campo com os parâmetros passados da trigger.

形式:

CREATE OR REPLACE TRIGGER TESTE."TRG_INC_TGFITE_A_TESTE"  
AFTER INSERT ON TGFITE
FOR EACH ROW
DECLARE
    VLRCOMISSAO NUMBER;
BEGIN 

--Conta Vlr comissão
VLRCOMISSAO := (:NEW.PERCCOM / 100) * :NEW.VLRTOT;
    
AD_INS_AFTER_TRIGGER_TGFITE
( VLRCOMISSAO 
, :NEW.NUNOTA
, :NEW.CODPROD
);
    
END;

e desta 形成一个程序:

CREATE OR REPLACE PROCEDURE TESTE."AD_INS_AFTER_TRIGGER_TGFITE" (
    P_VLRCOMISSAO INT,   
    P_NUNOTA INT,
    P_CODPROD INT
    ) IS
BEGIN
    
UPDATE TGFITE SET AD_VLRCOMISSAO = P_VLRCOMISSAO WHERE NUNOTA  = P_NUNOTA 
                         AND CODPROD = P_CODPROD;
     
END;

Meu problema de tabela mutante persiste, meu objetivo calcular os campos necessários e inseri-los em um novo campo no mesmo insert que ativa a trigger

ORA-04091: a tabela TESTE.TGFITE é mutante; talvez o gatilho/função não possa localizá-la
ORA-06512: em "TESTE.AD_INS_AFTER_TRIGGER_TGFITE", line 8
ORA-06512: em "TESTE.TRG_INC_TGFITE_A_TESTE", line 16
ORA-04088: erro durante a execução do gatilho 'TESTE.TRG_INC_TGFITE_A_TESTE'
sql triggers procedure
© www.soinside.com 2019 - 2024. All rights reserved.