Se for Null, retornar um dos valores não Null

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
Luis Philipe
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 3
Registrado em: Qua, 09 Jun 2021 2:27 pm
Localização: Uberlândia, Brasil

Boa Tarde...
Tenho uma dúvida e gostaria de saber se vocês poderiam me ajudar por gentileza. Estou mexendo com Oracle forms e na Post-Query montei um código que me retorna uma data, + 912 dias considerando duas datas... considerando sempre a mais antiga do 'data_admissao' ou 'data_hab'. E o resultado me apresenta no 'prox_exame'. Porém alguns campos do 'prox_exame' eles estão vindo em branco, porque ou o 'data_admissao' ou 'data_hab' também não tem nada preenchido, mas sempre um dos dois tem algum dado. Quando for assim, gostaria que o 'prox_exame' me retornasse o valor de um dos dois que não é null. Segue o código abaixo

Selecionar tudo

if (trunc(:motoristas.data_admissao,'dd')) <= (trunc(:motoristas.data_hab,'dd')) then
		:motoristas.prox_exame := trunc(:motoristas.data_admissao,'dd')+ 912;
	else
		:motoristas.prox_exame := trunc(:motoristas.data_hab,'dd')+ 912;
	end if;
end;
Desde já agradeço e permaneço no aguardo !!
Abs: Luís
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

Bom, pra começar não é necessário colocar TRUNC com DD se você quer truncar por dia. (Se quiser truncar por mês ou ANO, daí sim).
Veja:

Selecionar tudo

select sysdate, trunc(sysdate), trunc(sysdate,'dd') 
from dual;
trunc_01.png
Agora vamos para o seu problema. Eu fiz a mesma coisa em uma linha:

Selecionar tudo

 :motoristas.prox_exame := least ( NVL(:motoristas.data_admissao  ,:motoristas.data_hab+1)
                                 , NVL(:motoristas.data_hab       ,:motoristas.data_admissao+1)
                                 ) + 912; 
Veja se você consegue entender o que está acontecend aí. Se tiver dúvida, manda pra gente!
Neste exemplo, se UMA das datas estiver nula, ele funciona mesmo assim.
Luis Philipe
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 3
Registrado em: Qua, 09 Jun 2021 2:27 pm
Localização: Uberlândia, Brasil

dr_gori era exatamente isso que eu precisava... Consegui entender perfeitamente o seu raciocínio e obrigado pelas dicas...
o código encaixou perfeitamente no que eu precisava !!!
Abs: Luís !!
Responder
  • Informação
  • Quem está online

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