Select MAX com Exceptions

Este forum é dedicado a códigos errados que se encontram por aí, ou seja, coisas que não se deve fazer de jeito nenhum! Não coloque neste forum dúvidas! (apenas situações bizarras do nosso dia a dia :-)
Responder
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Inagurando o novo fórum de "Erros do dia-a-dia", deixo um erro clássico que de vez em quando eu encontro por aí. Tente encontrar o erro:

Selecionar tudo

Begin
  Select max(cd_segurado_principal)
  Into :bl_segurado.cd_segurado_principal
  From tb_segurado
  Where cd_cliente_segurado = :bl_segurado.cd_cliente_segurado;
Exception
  when too_many_rows THEN
    pr_informacao('Há mais de um registro com o nome deste Segurado: '
                  ||CHR(13)||:bl_cliente.nm_cliente);
  When no_data_found THEN
    null;
  When Others Then
    pr_erro('Falha ao recuperar a próxima sequência para o Segurado: '||SQLERRM);
End;
Veja só: O cara que fez isso montou todos exceptions direitinho. A única coisa é que nenhum deles servem pra nada! Um select MAX desse jeito sempre vai retornar uma linha, ou seja, não vai cair no TOO_MANY_ROWS nem no NO_DATA_FOUND nunquinha da silva!

Selecionar tudo

SQL> select * from emp;

     EMPNO ENAME      JOB              MGR HIREDATE         SAL
---------- ---------- --------- ---------- --------- ----------
      7369 SMITH      CLERK           7902 17-DEC-80        800
      7499 ALLEN      SALESMAN        7698 20-FEB-81       1600
      7521 WARD       SALESMAN        7698 22-FEB-81       1250
      7566 JONES      MANAGER         7839 02-APR-81       2975
      7654 MARTIN     SALESMAN        7698 28-SEP-81       1250
      7698 BLAKE      MANAGER         7839 01-MAY-81       2850
      7782 CLARK      MANAGER         7839 09-JUN-81       2450
      7788 SCOTT      ANALYST         7566 19-APR-87       3000
      7839 KING       PRESIDENT            17-NOV-81       5000
      7844 TURNER     SALESMAN        7698 08-SEP-81       1500
      7876 ADAMS      CLERK           7788 23-MAY-87       1100
      7900 JAMES      CLERK           7698 03-DEC-81        950
      7902 FORD       ANALYST         7566 03-DEC-81       3000
      7934 MILLER     CLERK           7782 23-JAN-82       1300

14 rows selected.

SQL> select max(sal) 
  2  from emp
  3  where ename='THOMAS'
  4  /

  MAX(SAL)
----------


SQL> 
Observe que mesmo não retornando nenhuma linha, o select MAX retorna como NULO o valor.

Além dessa, tenho outras milhares de situações bizarras que eu encontro nos programas. Caso você tenha coisas assim, larga aqui pra gente aprender com os erros dos outros, (ou apenas dar umas risadas) :-D
mariogus
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 157
Registrado em: Sex, 30 Nov 2007 1:17 pm
Localização: Porto Alegre - RS

Pessoal...Qual é a melhor maneira de organizar as exceções...tenho um código enorme e com vários exceptions que não sei se funcionam..Alguma dica?
JLM
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 11
Registrado em: Ter, 23 Mar 2010 5:15 pm
Localização: Araraquara-SP

se a situação for a execução em lote, sendo um procedimento depende do outro, acho melhor você embutir tudo em uma PACKAGE, onde você pode desenvolver varias procedures.
Avatar do usuário
gpilger
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 29
Registrado em: Qua, 21 Abr 2010 3:34 pm
Localização: Novo Hamburgo - RS
Gilson Pilger
"Por não saber que erra impossível, ele foi lá e fez" autor desconhecido

Vai ver o o MAX foi incluído depois e a pessoa não se prestou a remover as exception.... mas que é engraçado é... haha
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 9 visitantes