Retornar linhas da tabela com mais de um campo nulo

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
denismilaski
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Ter, 22 Fev 2011 3:52 pm
Localização: SP

Boa tarde,

Meu banco de dados possue uma tabela com mais de 40 campos(colunas). Gostaria de saber se é possível fazer um select que teste cada campo e caso o campo for nulo, retorne a linha pra mim. Tudo isso sem que eu crie um "IF" para cada campo.
O select teria de analisar a tabela inteira e se existir alguma linha que possua algum campo nulo, que essa linha seja retornada na pesquisa.
É possível?

Espero que eu tenha sido claro...rss
Não tenho experiência em fóruns

Um abraço.
gfkauer
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 389
Registrado em: Ter, 27 Jul 2010 1:34 pm
Localização: Sapiranga - RS
Contato:
Quem falou que programar era fácil??

Quanto mais dificil for a implementação mais valorizado seu trabalho será!

Acessem: www.gfkauer.com.br

Olá denismilaski

Primeiro que selects não usam IFs, mas cláusulas de restição. Mas sim você foi claro (pelo menos pra mim).
Segundo, pelo que me consta a maneira mais simples seria colocar uma clausula Or para cada coluna, o que se torna de simples leitura mas exaustivo na programação devido ao alto número de colunas da sua tabela...
Tineks
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 365
Registrado em: Ter, 24 Mai 2005 2:24 pm
Localização: Araraquara - SP
Cristiano (Tineks)
Araraquara - SP

Denis, se você concatenar um campo nulo com um não nulo, o valor retornado será nulo.. vê se é isso q você precisa..

Selecionar tudo

QL> 
SQL> with tbl as (select 1 linha, 'X'  campo1, 'W'  campo2, 'Y'  campo3 from dual union
  2               select 2 linha, null campo1, 'W'  campo2, 'Y'  campo3 from dual union
  3               select 3 linha, null campo1, 'W'  campo2, null campo3 from dual union
  4               select 4 linha, null campo1, null campo2, null campo3 from dual)
  5  select * from tbl
  6  where (campo1||campo2||campo3) is null
  7  /

     LINHA CAMPO1 CAMPO2 CAMPO3
---------- ------ ------ ------
         4               
[]s!!
burga
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Qui, 26 Nov 2009 1:05 pm
Localização: SP
Ricardo H. Tajiri

No caso, o NULL como resultado de concatenação de campos só é retronado quando todos os campos são nulos, o que acaba sendo o mesmo que utilizar a função coalesce. Acho que o que o Denis quer é que retorne a linha quando pelo menos 1 dos campos for nulo.

Existem alguns meios de retornar estes registros, mas acredito que o mais simples deles, como o gfkauer mesmo disse, é encher a consulta com cláusulas OR.
denismilaski
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Ter, 22 Fev 2011 3:52 pm
Localização: SP

É...meu medo era esse...

Ter de encher de cláusulas OR.

Ao todo são 107 colunas :cry:

Bom...caso alguém consiga algum meio de fazer essa varredura na tabela pra achar campo nulo e caso encontre, retorne a linha...por favor me avise...

Gente...muito obrigado pela atenção que vocês deram...gostei muito desse fórum...

valeu!
ballboas
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 98
Registrado em: Qui, 02 Ago 2007 3:06 pm
Localização: sp
Érico Balboa

A pergunta mais cretina é aquela que não é feita

Pra ficar menos trabalhoso.

Selecionar tudo

select column_name||' IS NULL OR ' from user_tab_columns
where table_name = 'SUATABELA'
order by column_id;
Responder
  • Informação
  • Quem está online

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