Re: [oracle_br] Problema com Function

2007-05-30 Por tôpico Marcio Portes
Eu tenho!!
NUNCA USE EXCETION WHEN OTHERS Voce está mascarando seu erro!!!
Tire isso e rode a function para saber qual erro REALMENTE acontece!
E, se tiver um tempinho, leia
http://mportes.blogspot.com/2005/07/boas-prticas-de-programao-when-others.html


On 5/30/07, Wilson Ribeiro <[EMAIL PROTECTED]> wrote:
>
>   Senhores da lista, boa tarde.
>
> me deparei hoje com um problema, que nunca tinha visto.
>
> criei uma function, e nela passo alguns parametros, dentro da function
> defini um cursor e um select para o mesmo, acontece o seguinte, qdo eu
> chamo
> essa function, passando os parametros normais, o select só retorna null,
> qdo
> fixo os dados no select, ele encontra e o result set vem com dados.
> abaixo está o código da function:
>
> create or replace function fn_valor_ap(v_num_ap in ap_valores.num_ap%TYPE,
> v_cod_empresa in ap_valores.cod_empresa%TYPE,
> v_valor_ap in ap_valores.valor%TYPE)
>
> return number is
> result number;
> oper varchar2(1);
>
> Valor Number;
> Codigo Number;
>
> cursor cur1 is
> select ap_valores.valor, ap_valores.cod_tip_val
> from ap_valores
> where ap_valores.cod_empresa = v_cod_empresa --// aqui se fica '01' ele
> acha
> dados
> and ap_valores.num_ap = v_num_ap --// aqui se fica 15846 ele acha dados
> and ap_valores.ies_versao_atual = 'S';
> begin
> result := v_valor_ap;
>
> open cur1;
>
> loop
> fetch cur1 into valor, codigo;
>
> exit when cur1%notFound;
>
> select ies_alt_val_pag
> into oper
> from tipo_valor
> where tipo_valor.cod_tip_val = codigo
> and tipo_valor.cod_empresa = v_cod_empresa;
>
> if oper = '+' then
> result := result + valor;
> else
> result := result - valor;
> end if;
> end loop;
>
> return(result);
> EXCEPTION
> WHEN OTHERS THEN
> RETURN(NULL);
> end fn_valor_ap;
>
> Alguém teria idéia do que se passa?, obrigado por qquer ajuda.
>
> - - - - - - - - - - -
> [ ]'s
>
> Wilson Ribeiro
> [EMAIL PROTECTED] 
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>  
>



-- 
Marcio Portes
Material Tecnico em Portugues - http://mportes.blogspot.com
Practical Learning Oracle -
http://mportes.blogspot.com/2006/02/practical-learning-oracle.html


[As partes desta mensagem que não continham texto foram removidas]



Re: [oracle_br] Problema com Function

2007-05-30 Por tôpico Cristofer Weber
Caro Wilson,

Levantando uma hipótese, visto que os tipos das colunas não estão
explícitos:

No comentário do cursor você diz que passando '01' para cod_empresa funciona
a contento. Não ocorre de você, na chamada da função, passar 01 de forma
numérica (ou mesmo 1) e a conversão para VARCHAR introduzir '1' como
cod_empresa?

Espero ter ajudado

att

Cristofer

Em 30/05/07, Wilson Ribeiro <[EMAIL PROTECTED]> escreveu:
>
>   Senhores da lista, boa tarde.
>
> me deparei hoje com um problema, que nunca tinha visto.
>
> criei uma function, e nela passo alguns parametros, dentro da function
> defini um cursor e um select para o mesmo, acontece o seguinte, qdo eu
> chamo
> essa function, passando os parametros normais, o select só retorna null,
> qdo
> fixo os dados no select, ele encontra e o result set vem com dados.
> abaixo está o código da function:
>
> create or replace function fn_valor_ap(v_num_ap in ap_valores.num_ap%TYPE,
> v_cod_empresa in ap_valores.cod_empresa%TYPE,
> v_valor_ap in ap_valores.valor%TYPE)
>
> return number is
> result number;
> oper varchar2(1);
>
> Valor Number;
> Codigo Number;
>
> cursor cur1 is
> select ap_valores.valor, ap_valores.cod_tip_val
> from ap_valores
> where ap_valores.cod_empresa = v_cod_empresa --// aqui se fica '01' ele
> acha
> dados
> and ap_valores.num_ap = v_num_ap --// aqui se fica 15846 ele acha dados
> and ap_valores.ies_versao_atual = 'S';
> begin
> result := v_valor_ap;
>
> open cur1;
>
> loop
> fetch cur1 into valor, codigo;
>
> exit when cur1%notFound;
>
> select ies_alt_val_pag
> into oper
> from tipo_valor
> where tipo_valor.cod_tip_val = codigo
> and tipo_valor.cod_empresa = v_cod_empresa;
>
> if oper = '+' then
> result := result + valor;
> else
> result := result - valor;
> end if;
> end loop;
>
> return(result);
> EXCEPTION
> WHEN OTHERS THEN
> RETURN(NULL);
> end fn_valor_ap;
>
> Alguém teria idéia do que se passa?, obrigado por qquer ajuda.
>
> - - - - - - - - - - -
> [ ]'s
>
> Wilson Ribeiro
> [EMAIL PROTECTED] 
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>  
>


[As partes desta mensagem que não continham texto foram removidas]



RE: [oracle_br] Problema com Function

2007-05-30 Por tôpico Jose Resende Neto
Wilson,

 

você deve passar os valores dos parâmetros para o cursor também.

Tenta assim:

 

cursor cur1 (v_cod_empresa in varchar, v_num_ap in number) is
select ap_valores.valor, ap_valores.cod_tip_val
from ap_valores
where ap_valores.cod_empresa = v_cod_empresa --// aqui se fica '01' ele acha

dados
and ap_valores.num_ap = v_num_ap --// aqui se fica 15846 ele acha dados
and ap_valores.ies_versao_atual = 'S';

 

…

 

open cur1 (v_cod_empresa, v_num_ap);

 

….

 

Espero ter ajudado.

//Neto

 

 

  _  

From: oracle_br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] On
Behalf Of Wilson Ribeiro
Sent: quarta-feira, 30 de maio de 2007 16:50
To: oracle_br@yahoogrupos.com.br
Subject: [oracle_br] Problema com Function

 

Senhores da lista, boa tarde.

me deparei hoje com um problema, que nunca tinha visto.

criei uma function, e nela passo alguns parametros, dentro da function 
defini um cursor e um select para o mesmo, acontece o seguinte, qdo eu chamo

essa function, passando os parametros normais, o select só retorna null, qdo

fixo os dados no select, ele encontra e o result set vem com dados.
abaixo está o código da function:

create or replace function fn_valor_ap(v_num_ap in ap_valores.num_ap%TYPE,
v_cod_empresa in ap_valores.cod_empresa%TYPE,
v_valor_ap in ap_valores.valor%TYPE)

return number is
result number;
oper varchar2(1);

Valor Number;
Codigo Number;

cursor cur1 is
select ap_valores.valor, ap_valores.cod_tip_val
from ap_valores
where ap_valores.cod_empresa = v_cod_empresa --// aqui se fica '01' ele acha

dados
and ap_valores.num_ap = v_num_ap --// aqui se fica 15846 ele acha dados
and ap_valores.ies_versao_atual = 'S';
begin
result := v_valor_ap;

open cur1;

loop
fetch cur1 into valor, codigo;

exit when cur1%notFound;

select ies_alt_val_pag
into oper
from tipo_valor
where tipo_valor.cod_tip_val = codigo
and tipo_valor.cod_empresa = v_cod_empresa;

if oper = '+' then
result := result + valor;
else
result := result - valor;
end if;
end loop;

return(result);
EXCEPTION
WHEN OTHERS THEN
RETURN(NULL);
end fn_valor_ap;

Alguém teria idéia do que se passa?, obrigado por qquer ajuda.

- - - - - - - - - - -
[ ]'s

Wilson Ribeiro
[EMAIL PROTECTED] <mailto:cpd%40gmengenharia.com.br> com.br

[As partes desta mensagem que não continham texto foram removidas]

 



[As partes desta mensagem que não continham texto foram removidas]



[oracle_br] Problema com Function

2007-05-30 Por tôpico Wilson Ribeiro
Senhores da lista, boa tarde.

me deparei hoje com um problema, que nunca tinha visto.

criei uma function, e nela passo alguns parametros, dentro da function 
defini um cursor e um select para o mesmo, acontece o seguinte, qdo eu chamo 
essa function, passando os parametros normais, o select só retorna null, qdo 
fixo os dados no select, ele encontra e o result set vem com dados.
abaixo está o código da function:

create or replace function fn_valor_ap(v_num_ap in ap_valores.num_ap%TYPE,
v_cod_empresa in ap_valores.cod_empresa%TYPE,
v_valor_ap in ap_valores.valor%TYPE)

return number is
result number;
oper varchar2(1);

Valor Number;
Codigo Number;

cursor cur1 is
select ap_valores.valor, ap_valores.cod_tip_val
from ap_valores
where ap_valores.cod_empresa = v_cod_empresa --// aqui se fica '01' ele acha 
dados
and ap_valores.num_ap = v_num_ap --// aqui se fica 15846 ele acha dados
and ap_valores.ies_versao_atual = 'S';
begin
result := v_valor_ap;

open cur1;

loop
fetch cur1 into valor, codigo;

exit when cur1%notFound;

select ies_alt_val_pag
into oper
from tipo_valor
where tipo_valor.cod_tip_val = codigo
and tipo_valor.cod_empresa = v_cod_empresa;

if oper = '+' then
result := result + valor;
else
result := result - valor;
end if;
end loop;

return(result);
EXCEPTION
WHEN OTHERS THEN
RETURN(NULL);
end fn_valor_ap;



Alguém teria idéia do que se passa?, obrigado por qquer ajuda.

- - - - - - - - - - -
[ ]'s

Wilson Ribeiro
[EMAIL PROTECTED]



[As partes desta mensagem que não continham texto foram removidas]