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'