Re: [oracle_br] Problema com Function
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
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
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
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]