Bem, só observo que o SQL Developer 4 está em estágio de early adopter, não 
sei se já está estável o suficiente para uso diário... Anyway, a referência 
melhor para SQL Developer é http://www.thatjeffsmith.com/ : esse link é do blog 
do tech leader do time que desenvolve o SQL Developer, busca nele por DEBUG que 
vc acha diversos artigos e explicações, além de dicas de configuração e de uso 
do produto...
  E é claro : no caso que vc postou, que parece ser algo simples e curto, 
enquanto vc aprende a usar o SD vc poderia fazer via sqlplus enquanto isso, 
como te mostrei....

 []s
 
   Chiappa

--- Em oracle_br@yahoogrupos.com.br, "ciadart" <rafael.henrique@...> escreveu
>
> Chiapa, bom dia!
> 
> Irei verificar todos os pontos considerados.
> 
> No meu caso eu utilizo o SQLDeveloper 4, porém não tenho conhecimento de como 
> fazer o debug com ele.
> 
> Vc teria algum manual ou link de algum site que ensine fazer o debbug com 
> esta ferramenta ?
> 
> Muito obrigado pelo retorno!
> 
> Rafael
> 
> 
> --- Em oracle_br@yahoogrupos.com.br, "J. Laurindo Chiappa" <jlchiappa@> 
> escreveu
> >
> >   A *** PRIMEIRA COISA *** que salta aos olhos é que, de maneira BEM 
> > ERRADA, vc ** SILENCIA ** qualquer erro com WHEN OTHERS : sabe-se lá se 
> > está dando algum erro que vc está perdendo.... PLZ remove isso ...
> >  
> >  Em segundo lugar, a técnica-PADRÃO para vc debugar lógica (que certamente 
> > deve ser o que está pegando aqui) é vc MOSTRAR via breakpoint/exibição de 
> > mensgaem/instrumentação/whatever exatamente AONDE a lógica está entrando, 
> > qual valor está sendo retornado.... 
> > 
> >  Se for sqlplus a tool que vc tem disponível, vc faria assim (conectado com 
> > o usuário correto, que tem todos os acessos, etc, etc) :
> >  
> >  => liga o output com :
> >  
> >   set serveroutput on
> >  
> > => executa o SELECT diretamente no sqlplus :
> >  
> > select
> > case when (v_diferencaferia >= 6) then -1
> > when (v_diferencaferia < 6) then 0
> > end case
> > from
> > (select sum(nvl(fi.nrdocumento,0)) v_diferencaferia
> > from dim_funcionarios f, fat_fichaconduta fi, dim_ocorrencias o
> > where
> > fi.cdfuncionario_sk = f.cdfuncionario_sk and
> > fi.cdocorrencia_sk = o.cdocorrencia_sk and
> > fi.dtcompetencia = to_date('30/04/2013','DD/MM/YYYY') and
> > fi.cdfuncionario_sk = 4053 and
> > o.cdocorrencia = 204
> > group by f.cdfuncionario_sk)
> > ;
> > 
> > => recria a Function com instrumentação :
> > 
> > create or replace FUNCTION SV_FLG_DIFERENCAFERIA (p_cdfuncionario_sk in
> > integer, p_dtcompetencia in varchar) RETURN integer AS
> > v_diferencaferia integer := 0;
> > BEGIN
> > -- apura se o colaborador teve diferenca de feria
> > -- se o resultado é 0 (zero) quer dizer que o colaborador nao teve
> > diferenca de feria abaixo de R$ 6,00
> > begin
> >    dbms_output.put_line('Início, v_diferencaferia=' || v_diferencaferia);
> >    select sum(nvl(fi.nrdocumento,0)) into v_diferencaferia
> >    from dim_funcionarios f, fat_fichaconduta fi, dim_ocorrencias o
> >    where
> >    fi.cdfuncionario_sk = f.cdfuncionario_sk and
> >    fi.cdocorrencia_sk = o.cdocorrencia_sk and
> >    fi.dtcompetencia = to_date(p_dtcompetencia,'DD/MM/YYYY') and
> >    fi.cdfuncionario_sk = p_cdfuncionario_sk and
> >    o.cdocorrencia = 204
> >    group by f.cdfuncionario_sk;
> >    --
> >    dbms_output.put_line('Após o select, v_diferencaferia=' || 
> > v_diferencaferia);
> > end;
> >    dbms_output.put_line('Vou executar case');
> >    case when (v_diferencaferia >= 6) then v_diferencaferia := -1;
> >    when (v_diferencaferia < 6) then v_diferencaferia := 0;
> >    end case;
> >    dbms_output.put_line('case colocou v_diferencaferia=' || 
> > v_diferencaferia);
> > return v_diferencaferia;
> > END;
> > 
> > => executa a function : como ela é uma FUNCTION, vc tem que criar uma 
> > variable de retorno no sqlplus, ou jogar a função num SELECT from dual, ou 
> > chamar a partir de um bloco anônimo.... Eu prefiro criar a variable :
> > 
> >  variable V_RETORNO number;
> >  exec :V_RETORNO := SV_FLG_DIFERENCAFERIA(4053 , '30/04/2013');
> >  print V_RETORNO
> >  
> >  
> >  e veja o que vc vai ver, yes ???? 
> >  
> >   []s
> >   
> >     Chiappa
> > 
> > --- Em oracle_br@yahoogrupos.com.br, Rafael HM Pereira <rafael.henrique@> 
> > escreveu
> > >
> > > Pessoal, boa tarde!!
> > > 
> > > Estou com uma situação um tanto intrigante e não sei mais o que fazer para
> > > tentar achar o erro.
> > > 
> > > Ao executar a query abaixo, ela me retorna corretamente o valor "0" como
> > > resultado:
> > > 
> > > select
> > > 
> > > case when (v_diferencaferia >= 6) then -1
> > >        when (v_diferencaferia < 6) then 0
> > >   end case
> > > 
> > > from
> > > 
> > > (select sum(nvl(fi.nrdocumento,0)) v_diferencaferia
> > >       from dim_funcionarios f, fat_fichaconduta fi, dim_ocorrencias o
> > >       where
> > >           fi.cdfuncionario_sk = f.cdfuncionario_sk and
> > >           fi.cdocorrencia_sk = o.cdocorrencia_sk and
> > >           fi.dtcompetencia = to_date('30/04/2013','DD/MM/YYYY') and
> > >           fi.cdfuncionario_sk = 4053 and
> > >           o.cdocorrencia = 204
> > >       group by f.cdfuncionario_sk)
> > > 
> > > 
> > > Porém, após "encapsular" a query em uma function, o valor retornado é
> > > sempre "-1", ou seja, um valor errado. Segue a function abaixo:
> > > 
> > > create or replace FUNCTION SV_FLG_DIFERENCAFERIA (p_cdfuncionario_sk in
> > > integer, p_dtcompetencia in varchar) RETURN integer AS
> > > 
> > > v_diferencaferia integer := 0;
> > > 
> > > BEGIN
> > > 
> > >   -- apura se o colaborador teve diferenca de feria
> > >   -- se o resultado é 0 (zero) quer dizer que o colaborador nao teve
> > > diferenca de feria abaixo de R$ 6,00
> > >   begin
> > > 
> > >       select sum(nvl(fi.nrdocumento,0)) into v_diferencaferia
> > >       from dim_funcionarios f, fat_fichaconduta fi, dim_ocorrencias o
> > >       where
> > >           fi.cdfuncionario_sk = f.cdfuncionario_sk and
> > >           fi.cdocorrencia_sk = o.cdocorrencia_sk and
> > >           fi.dtcompetencia = to_date(p_dtcompetencia,'DD/MM/YYYY') and
> > >           fi.cdfuncionario_sk = p_cdfuncionario_sk and
> > >           o.cdocorrencia = 204
> > >       group by f.cdfuncionario_sk;
> > > 
> > >       exception when OTHERS then v_diferencaferia := 0;
> > >   end;
> > > 
> > >   case when (v_diferencaferia >= 6) then v_diferencaferia := -1;
> > >        when (v_diferencaferia < 6) then v_diferencaferia := 0;
> > >   end case;
> > > 
> > >   return v_diferencaferia;
> > > 
> > > END;
> > > 
> > > 
> > > Não sei mais o que fazer e ou o que validar. Se alguem puder me dar uma 
> > > luz
> > > ficarei grato.
> > > 
> > > Muito obrigado
> > > 
> > > -- 
> > > Att,
> > > 
> > > Rafael HM Pereira
> > > 
> > > Linux User Id: 360166
> > > Skype: rafaelhmpereira
> > > MSN: rafael.henrique@
> > > Blog: http://rafaelhmpereira.blogspot.com
> > > LinkedIn: http://br.linkedin.com/in/rafaelhmpereira
> > > (27) 9233-0734 / (27) 3328-4320
> > > 
> > > 
> > > [As partes desta mensagem que não continham texto foram removidas]
> > >
> >
>


Responder a