Passar parametro para uma Trigger atravez de function/proc !

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
Hahu
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 147
Registrado em: Qui, 16 Mar 2006 11:26 am
Localização: São Paulo
O mundo gira muito!!

Amigos,
Bom dia,
Minha dúvida é essa..como faço para passar parametro para uma trigger atravez de function/procedure? :roll:

Eu tenho uma trigger que faz atualização após carregar informações em uma tab_a, essa atualização é em uma tab_b!! :cry:

Selecionar tudo

CREATE OR REPLACE TRIGGER trg_a
AFTER INSERT
ON owner.tab_a
for each row


--wvar_a number(14,2):= 0;



begin
      --wvar_a := fn_a(:new.col_a,:new.col_z);

      --proc_a;
      
      --wvar_b := p_col_b; 
      --wvar_a := p_col_a

      if :new.id_col_a = 1 then
      
           
            
         update tab_b 
       set col_c = 70,  ---> Esse valor eu pego da proc ou function :roll: 
           		col_a = :new.col_a
           		where col_d = :new. col_d;
           		
           		
                  
       elsif :new.id_col_a = 2 then
           update tab_b 
           	set col_c = 50,
           		col_a = :new.col_a
           		where col_d = :new. col_d;
           		
                  
           
                  
       elsif :new.id_col_a = 3 then
           update tab_b 
           	set col_c = 60,
           		col_a = :new.col_a
           		where col_d = :new. col_d;
           		
                  
                  
                  
       elsif :new.id_col_a = 4 then
       	update tab_b 
           	set col_c = 40,
           		col_a = :new.col_a
           		where col_d = :new. col_d;
           		
                  
                                   
       end if;                      
       
       
end;
/

Que Deus Abençõe a todos!

Abs Hahu
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

E qual é o problema?
APenas faça a sua função retornar o que você quiser ali!
Se não é isso, explique melhor!
Tineks
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 365
Registrado em: Ter, 24 Mai 2005 2:24 pm
Localização: Araraquara - SP
Cristiano (Tineks)
Araraquara - SP

Hahu,

Trigger não possui parametros de entrada, mas uma opção é fazer com que a trigger vá buscar uma determinada variavel em alguma package.
Exemplo :

Selecionar tudo

CREATE OR REPLACE --(spec)
PACKAGE pck_cristiano IS

   v_CODIGO NUMBER := 100;
   
   PROCEDURE A;

END;
/
CREATE OR REPLACE TRIGGER trg_teste_01
 BEFORE
  INSERT OR UPDATE
 ON cliente
REFERENCING NEW AS NEW OLD AS OLD
 FOR EACH ROW
BEGIN
   IF PCK_CRISTIANO.v_CODIGO = 100 THEN
      dbms_output.put_line('ok!');
   END IF;
END;
/
[]'s!!!!!!!
Hahu
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 147
Registrado em: Qui, 16 Mar 2006 11:26 am
Localização: São Paulo
O mundo gira muito!!

Fala dr_gori,
Td bom com você?
Então..eu tenho uma procedure prc_XA que tem um valor numárico, na verdade eu um total de somatórios..tipo assim:
:roll:

Selecionar tudo

v_val := v_val + qtd;

eu tava querendo passar esse valor para o update da col_c...ee não to sabendo como fazer isso!!
:(
já tentei criar uma outra procedure prc_XB(p_val in number), dentro da prc_XA, daee eu passo o parametro para a trigger!!

Selecionar tudo

exp: 
      
Procedures:
-------------     
       create or replace prc_XA is
   

        begin
           
           v_val : v_val + qtd;

           prc_XB(v_val);
     
       end;

Ná Trigger, como monto a procedure e passo o valor v_val na col c:

REATE OR REPLACE TRIGGER trg_a
AFTER INSERT
ON owner.tab_a
for each row


--wvar_a number(14,2):= 0;



begin
      --wvar_a := fn_a(:new.col_a,:new.col_z);

      --proc_a;
     
      --wvar_b := p_col_b;
      --wvar_a := p_col_a

      if :new.id_col_a = 1 then
     
           
           
         update tab_b
       set col_c = 70,  ---> Esse valor eu pego da proc ou function :roll:
                 col_a = :new.col_a
                 where col_d = :new. col_d;
                 
                 
                 
       elsif :new.id_col_a = 2 then
           update tab_b
              set col_c = 50,
                 col_a = :new.col_a
                 where col_d = :new. col_d;
                 
                 
           
                 
       elsif :new.id_col_a = 3 then
           update tab_b
              set col_c = 60,
                 col_a = :new.col_a
                 where col_d = :new. col_d;
                 
                 
                 
                 
       elsif :new.id_col_a = 4 then
          update tab_b
              set col_c = 40,
                 col_a = :new.col_a
                 where col_d = :new. col_d;
                 
                 
                                   
       end if;                     
       
       
end;
/




Tem alguma idéia como posso resolver este problema:
porque assim..se eu montar a proc separada , como passou valor do paramentro depois para a col_c!! :shock:

Me desculpe...dr_gori , mas to quebrando a cabeça para resolver isto...eu to te pedindo este help, porque acredito que não sabemos tudo..temos que ser humildes para pedir a ajuda e dizer o que não sabemos para as demais pessoas!!E isto não é vergonha, de você não saber as coisas! :wink:

Obrigado mesmo assim pela atenção!

Abs de seu amigo Hahu :) -m

Ps:Que Deus abençõe a todos!!
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

Como o Tineks citou acima, uma forma de passar parâmetro pra trigger é usar uma variável de package.

Outra forma é usar CONTEXT, que são as "variáveis globais do banco".
Aqui tem um exemplo de "view parametrizada"
http://glufke.net/oracle/viewtopic.php?t=732
Hahu
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 147
Registrado em: Qui, 16 Mar 2006 11:26 am
Localização: São Paulo
O mundo gira muito!!

Fala dr_gori,
bom dia,
valeu! :) !!
Abs Hahu
Responder
  • Informação
  • Quem está online

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