Trigger consultando em outra tabela

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
jerry-sc
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 45
Registrado em: Ter, 01 Nov 2011 1:24 pm

Boa tarde pessoal,

Estou tentando fazer uma trigger conforme abaixo, mas ela nem compila, alguém tem noção de como eu poderia fazer essa trigger, conforme a regra dentro dela?

Selecionar tudo

CREATE OR REPLACE TRIGGER CMJ_INTEGRA_NCM
AFTER INSERT OR UPDATE ON CODIGO_FISCAL
FOR EACH ROW

DECLARE

V_CODFISCAL    VARCHAR2(10);
V_DESCRICAO    VARCHAR2(200);
V_PERCIPI      NUMBER(5);
V_CONTADOR1     NUMBER(14);

     BEGIN
     CASE
     WHEN  
     SELECT TR.HANDLE FROM CORPORATIVO.TR_TIPIS TR WHERE REPLACE(TR.CODIGONBM,'.')=(:NEW.CODCLASFISCAL,' ') 

     IS NOT NULL THEN V_CONTADOR1=0
     WHEN  
     SELECT TR.HANDLE FROM CORPORATIVO.TR_TIPIS TR WHERE REPLACE(TR.CODIGONBM,'.')=(:NEW.CODCLASFISCAL,' ') 
     IS NULL THEN V_CONTADOR1=1
     END;
    
     IF V_CONTADOR1 > 1 THEN

        BEGIN
                     V_CODFISCAL := :NEW.CODCLASFISCAL;
                     V_DESCRICAO := :NEW.DESCRICAO;
                     V_PERCIPI   := :NEW.PERCIPI;
        END;
        
        BEGIN
                     V500_PRC_INT_NCM_F1 (V_CODFISCAL, V_DESCRICAO, V_PERCIPI);
        END;
        
     END IF;
END;



spernega
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Ter, 19 Jun 2007 2:12 pm
Localização: São Paulo - SP

boa tarde,

Acrescenta Referencing New As New Old As Old For Each Row antes do for each row

CREATE OR REPLACE TRIGGER CMJ_INTEGRA_NCM
AFTER INSERT OR UPDATE ON CODIGO_FISCAL
Referencing New As New Old As Old For Each Row
jerry-sc
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 45
Registrado em: Ter, 01 Nov 2011 1:24 pm

Tentei, mas ele diz que o Encoutered the synmbol "SELECT" when expecting one of the follow.

spernega escreveu:boa tarde,

Acrescenta Referencing New As New Old As Old For Each Row antes do for each row

CREATE OR REPLACE TRIGGER CMJ_INTEGRA_NCM
AFTER INSERT OR UPDATE ON CODIGO_FISCAL
Referencing New As New Old As Old For Each Row
spernega
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Ter, 19 Jun 2007 2:12 pm
Localização: São Paulo - SP

é , o case tem que estar em um select não funciona assim.

tenta transformar num select count

CREATE OR REPLACE TRIGGER CMJ_INTEGRA_NCM
AFTER INSERT OR UPDATE ON CODIGO_FISCAL
Referencing New As New Old As Old For Each Row
DECLARE
V_CODFISCAL VARCHAR2(10);
V_DESCRICAO VARCHAR2(200);
V_PERCIPI NUMBER(5);
V_CONTADOR1 NUMBER(14);
BEGIN
select count(1) into V_CONTADOR1
from CORPORATIVO.TR_TIPIS TR
WHERE REPLACE(TR.CODIGONBM,'.')=(:NEW.CODCLASFISCAL,' ');
--
IF V_CONTADOR1 >= 1 THEN
V_CODFISCAL := :NEW.CODCLASFISCAL;
V_DESCRICAO := :NEW.DESCRICAO;
V_PERCIPI := :NEW.PERCIPI;
V500_PRC_INT_NCM_F1 (V_CODFISCAL, V_DESCRICAO, V_PERCIPI);
END IF;
END;
/


não testei...
Responder
  • Informação