Pessoal como faço para chamar uma Function por uma Trigger?

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
franklin_kunioshi
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 27
Registrado em: Qui, 03 Jan 2008 9:24 am
Localização: São Paulo

Pessoal como faço para chamar uma Function por uma Trigger

exemplo tenho uma function que me retorna um erro caso uma validação não exista.

e preciso que esta minha trigger receba a Function como faço?

VLw pessoal![/code]
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brother,

É uma function de banco?

Caso positivo, chame-a normalmente dentro de tua trigger...

Selecionar tudo

V_VAR NUMBER(10); -- Se tua fun retorna number
BEGIN
  V_VAR := FUN_NOME_FUN(PARAMETRO=>'X');
END;
Caso não seja isso, coloque teu código aqui pra gente, beleza?
franklin_kunioshi
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 27
Registrado em: Qui, 03 Jan 2008 9:24 am
Localização: São Paulo

Não é uma trigger de banco não. É uma trigger de validação de uma regra do meu forms.

Selecionar tudo

Declare
   v_valida_cartao varchar2(1); 
   v_verifica      varchar2(1);   
   v_nivel_servico   number(5);

Begin  

FUNC_VALIDA_FIDELIDADE( p_valida_cartao    
                       , p_verifica           
                       , p_nivel_servico   
                       , p_msg            );   
 

    IF A = 1 then
	      Alerta1('Não existe Cartão Fidelidade com este numero.Favor Usar a Lista!') ;
        :cartao_fidelidade_polcom.fk_cfid_ad_cartao := null;
        :cartao_fidelidade_polcom.cd_usu_ult_alz := null;
        :cartao_fidelidade_polcom.ts_ult_alz := null;
        raise form_trigger_failure;
    END IF;
  

   IF A = 2 THEN
        Alerta1('Cartão já inserido para  Nível de Serviço '||v_nivel_servico);   
        :cartao_fidelidade_polcom.fk_cfid_ad_cartao := null;
        :cartao_fidelidade_polcom.cd_usu_ult_alz := null;
        :cartao_fidelidade_polcom.ts_ult_alz := null;
        raise form_trigger_failure;
   END IF;
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brother,

Você deve retornar este valor da função, em uma variável.
Esta função retorna que tipo de dados?

Supondo que retorna um varchar2...

Selecionar tudo

...
Declare 
   v_valida_cartao varchar2(1); 
   v_verifica      varchar2(1);    
   v_nivel_servico   number(5);
   v_ret_funcao_fid varchar2(100); 

Begin  

v_ret_funcao_fid := FUNC_VALIDA_FIDELIDADE( p_valida_cartao    
                       , p_verifica            
                       , p_nivel_servico    
                       , p_msg            );    

-- .. toma as decisões ...
IF V_RET_FUNCAO_FID = 'NNNNN'
THEN
...
qualquer coisa manda ai.
franklin_kunioshi
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 27
Registrado em: Qui, 03 Jan 2008 9:24 am
Localização: São Paulo

Obrigado pela ajuda mais encontrei outra maneira de fazer utilizando o codigo que você me passou.

VOu coloca-lo aqui duvidas postem

Selecionar tudo

Declare
   v_teste            number(2); // Minha Function retorna um erro em valor numérico
   v_msg             varchar2(255);// Esta variável está vinculada a Function, ela exibe a mensagem de erro de acordo com o erro na function.

Begin  
  v_teste := FUNC_VALIDA_FIDELIDADE( :CARTAO_TESTE.FK_CFID_AD_CARTAO,
:NIVEL_TESTE.FK_POLCOM_CD_POLCOM,
:NIVEL_TESTE.FK_AD_NIVSERV_POLCOM,
v_msg );// Aqui estão os parâmetros que a Trigger necessita para fazer o teste.

  if v_erro > 0 then
	  alerta1(v_msg) ;
    :cartao_fidelidade_polcom.fk_cfid_ad_cartao := null;
    :cartao_fidelidade_polcom.cd_usu_ult_alz := null;
    :cartao_fidelidade_polcom.ts_ult_alz := null;
    raise form_trigger_failure;
  
  End if;
  --
End;

Vlw pessoal estou abrindo outro topico se poderem me ajudar agradeço
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Majestic-12 [Bot] e 16 visitantes