Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

max.thomaz

Busca de um código mais apropriado.

Recommended Posts

Pessoal,Eu não gosto de código muito grande, ainda mais quando coloco na cabeça que existe uma maneira mais simples e rápida de se realizar uma tarefa lógica.Em uma de minhas procedures, no corpo do pacote declarei:create or replace package PCK_MX02_RELATORIOS is-- TYPE cursor_type IS REF CURSOR;-- /*LISTA PRODUTOS PARA FILTRO DE ACORDO COM O LABORATÓRIO*/ procedure SP_PRODUTOS ( vNM_LABORAT IN VARCHAR2, cRETORNO OUT CURSOR_TYPE, vMSG OUT VARCHAR2); end PCK_MX02_RELATORIOS;No body do pacote: .... e_null exception; begin if trim(vNM_LABORAT) is null then raise e_null; end if; open cRETORNO for select descricao_medicamento as produto from tbmx02_produtos where trim(nome_laboratorio) = upper(trim(vNM_LABORAT)) group by descricao_medicamento order by descricao_medicamento; exception when e_null then vMSG := 'Parâmetro vNM_LABORAT não pode ser nulo.'; when others then vMSG := SQLERRM; end SP_PRODUTOS; ....Minha dúvida é, quando o select não encontra nada, o cursor fica nulo, gostaria de implementar uma exceção que retornasse o valor 'Dados não encontrados', conversando com amigos desenvolvedores nessa linguagem, me disseram que a única forma de fazer isso é fazer um outro select similar antes e jogar o valor do count em uma variável inteira, se ela for 0, dou raise e exibo a msg, porém assim o bloco ficaria com tamanha dobrado. Alguém conhece alguma solução melhor?Obrigado,Max

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em geral uso o cursor num FOR, e controlo por contador.

 

ex

vn_qtd number;

begin

vn_qtd := 0;
for r in (select ...)
loop
  vn_qtd := vn_qtd + 1;
  ... processo;
end loop;
if vn_qtd = 0 then
  raise_application_error(-20001,'Cursor vazio');
end if; 
end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.