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
Como chamar uma função na trigger Pre_query do forms
-
- 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??
vê se tu consegue tirar proveito disso!
falou!!!
você tentou chamar ela para dentro de uma variavel??
DECLARE
UNID NUMBER(4);
BEGIN
SELECT CALCULA_DIVERGENCE('DATA1', 'DATA2')
INTO UNID
FROM DUAL;
END;
falou!!!
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 12 visitantes