Possível valor NULL em cursor parametrizado

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
jks1903
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 188
Registrado em: Qui, 04 Fev 2010 8:08 am

Pessoal, tenho um cursor com essa estrutura:

Selecionar tudo

Cursor nomeCursor (parametro tipo) is
select * from tabela
where campo = parametro;
O que ocorre é que parametro pode ser NULL e com isso o cursor não traz os valores onde esse campo seja nulo. Há alguma forma de trazer os valores nulos de forma que a sintaxe do select não mude tendo ou não valores. Por mudar me refiro ao caso de que para trazer valores nulos em geral o teste é IS NULL ao invés de = NULL.

Obrigado.
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Uma possibilidade:

Selecionar tudo

Cursor nomeCursor (parametro tipo) is
select * from tabela
where nvl(campo,-1) = NVL(parametro,-1);
jks1903
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 188
Registrado em: Qui, 04 Fev 2010 8:08 am

Noctifero, vlw pela idéia.
Eu havia pensado em algo semelhante, porém esse campo em questão é uma espécie de tag definia pelo usuário, ou seja, pode conter qualquer valor (o que passar na cabeça do usuário para identificar o item, rsrs).

Se não conseguir de outra forma vou ter que fazer algo assim mesmo, colocando uma loucura grande no NVL, mas ainda to atrás de uma solução mais elegante se possível.
Avatar do usuário
stcoutinho
Moderador
Moderador
Mensagens: 850
Registrado em: Qua, 11 Mai 2011 5:15 pm
Localização: são Paulo - SP

Hum,

Por que não adiconar no seu where uma condição composta?

Exemplo:

Selecionar tudo

Cursor nomeCursor (parametro tipo) is
select * from tabela
where ( (campo = parametro AND parametro IS NOT NULL) OR (parametro IS NULL));
Na querie acima, se o usuário informar NULL, então significa que vou trazer todos os registros da querie.

Abraços,

Sergio Coutinho
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Opa,
Bem observado pelo Sérgio.
Pelo que eu tinha entendido seria você poder selecionar APENAS OS NULOS também. Ou que contem certo valor, ou que contém nulo.

Mas se a idéia for se o parâmetro for nulo trazer tudo, é como o Sérgio mostrou.
jks1903
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 188
Registrado em: Qui, 04 Fev 2010 8:08 am

Desculpem a demora em responder, vi as respostas e estava sem tempo, rsrs.

A idéia do stcoutinho funcionou realmente como eu necessitava.

Noctifero, você entendeu corretamente, a query deve trazer determinado valor se informado, ou caso seja informado NULL, apenas os registros onde esse campo é NULL. Mas a solução do stcoutinho atende a essa necessidade.

Obrigado a todos pelas respostas, até mais.
Avatar do usuário
aarao.primo
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 8
Registrado em: Seg, 08 Ago 2011 9:37 am
Localização: Rio de Janeiro

Muito bom sérgio resolveu meu problema! Obrigado
Responder
  • Informação
  • Quem está online

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