Como chamar uma função na trigger Pre_query do forms

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
Laninha
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 68
Registrado em: Qua, 24 Out 2007 3:06 pm
Localização: Nilópolis - Rio de Janeiro

Amigos,

A minha função é essa abaixo como vocês já devem saber:

CREATE OR REPLACE FUNCTION CALCULA_DIVERGENCE (p_dtfrom in DATE, p_dtto in DATE)
RETURN number IS

--Declarando variáveis

V_UNID NUMBER(4);




BEGIN

BEGIN
SELECT ff.id_unid_fornec
INTO V_UNID
FROM ffor_fat_fornec ff,
itff_item_fat_fornec itff,
itpe_item_pedido itpe
WHERE ff.num_fat_fornec = itff.num_fat_fornec
and ff.id_unid_fornec = itff.id_unid_fornec
and ff.cod_interno_fat_fornec = itff.cod_interno_fat_fornec
and ff.id_instalacao_empresa_pedido = itff.id_instalacao_empresa_pedido
and itff.num_pedido = itpe.num_pedido
and itff.num_seq_item_pedido = itpe.num_seq_item_pedido
and itff.cod_brasif_item = itpe.cod_brasif_item
and ff.dt_emissao_fat_fornec BETWEEN TRUNC(p_dtfrom) and TRUNC(p_dtto)


HAVING ((sum(nvl(itff.qtd_item_fat_fornec,0) + nvl(itff.qtd_free_fat_fornec,0)))=
(sum(nvl(itpe.qtd_solicitada,0) + nvl(itpe.qtd_free_promocao,0) + nvl(itpe.qtd_free_desconto,0))))

GROUP BY ff.id_unid_fornec;
RETURN (V_UNID);
END;
END CALCULA_DIVERGENCE;

E dentro da minha PRE_QUERY eu tenho:

BEGIN
DECLARE
block_id Block := find_block('POOP2');
sub_where VARCHAR2(512);
def_where VARCHAR2(2000);
alert number := 0;

FUNCTION add_and(
P_WHERE IN VARCHAR2
) RETURN VARCHAR2 IS
BEGIN
IF (nvl(length(P_WHERE),0) !=0)then
RETURN(P_WHERE||'AND');
ELSE
RETURN(P_WHERE);
END IF;
END;

BEGIN
def_where := '(dt_emissao_fat_fornec between to_date('''
||to_char(:blk_seletor.dt_from, 'mmddyyyy')
||''', ''mmddyyyy'')and to_date('''
||to_char(:blk_seletor.dt_to, 'mmddyyyy')
||''', ''mmddyyyy'')OR '''||:blk_seletor.dt_from||''' is null
and '''||:blk_seletor.dt_to||''' is null)
and status_fatura = '''||'ACCEPTED'||'''
and exists(select ffor_cargas_fornec.num_fat_fornec
from ffor_cargas_fornec
where ffor_fat_fornec.num_fat_fornec = ffor_cargas_fornec.num_fat_fornec
and ffor_fat_fornec.id_unid_fornec =ffor_cargas_fornec.id_unid_fornec
and ffor_fat_fornec.id_instalacao_empresa_pedido = ffor_cargas_fornec.id_instalacao_empresa_pedido
and exists(select pedi_clas_envolve_pedido.num_pedido
from pedi_clas_envolve_pedido
where ffor_cargas_fornec.num_pedido = pedi_clas_envolve_pedido.num_pedido
and exists(select clas_classe_item.cod_classe_item
from clas_classe_item
where clas_classe_item.cod_classe_item = '''||:category||'''
and pedi_clas_envolve_pedido.cod_classe_item = clas_classe_item.cod_classe_item
and pedi_clas_envolve_pedido.tipo_classe_item = clas_classe_item.tipo_classe_item
OR '''||:category||''' is null)))
and (id_unid_fornec = '''||:id_unid_emp||'''
OR '''||:id_unid_emp||''' is null)';



set_block_property('FFOR_FAT_FORNEC',DEFAULT_WHERE, def_where);




END;
END;

A função já testei e funciona perfeitamente quando insiro valores para meusa parâmentros, assim como minha PRE_QUERY sem a chamada da função dentro dela funciona perfeitamente.
Pergunta: Como posso chamar essa função dentro dessa PRE_QUERY que eu possuo? Outra, essa função eu fiz dentro do Programs Units do Forms.

Obrigada como sempre,
Laninha :D
Renan Orati
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 90
Registrado em: Qui, 23 Ago 2007 3:40 pm
Localização: São José do Rio Preto - SP

beleza?

você tentou chamar ela para dentro de uma variavel??

Selecionar tudo

DECLARE
  UNID NUMBER(4);
BEGIN
  SELECT CALCULA_DIVERGENCE('DATA1', 'DATA2')
    INTO UNID
    FROM DUAL;
END;
vê se tu consegue tirar proveito disso!

falou!!!
Laninha
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 68
Registrado em: Qua, 24 Out 2007 3:06 pm
Localização: Nilópolis - Rio de Janeiro

Renan,

Na verdade a minha função tava trazendo mais de um registro, com certeza era por isso que não dava certo. Mas, muito obrigada mesmo assim pela ajuda.



Abrços,
Laninha :wink:
Responder
  • Informação
  • Quem está online

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