Select com varios dados mas não funciona com dados NULL

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
FFernando
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 15
Registrado em: Ter, 18 Set 2007 7:52 pm
Localização: SP

Olá galera,
estou com um problema para retornar dados NULOS, no banco o campo ANO esta como NULL e numérico, o cliente cadastrou dados de 0 até 2008, e teve alguns registros q ele não colocou nada nesse campo, ou seja ficou NULL

Selecionar tudo

select distinct * from
(select
*
from
(
SELECT
NVL(C.OLDSTOCKNUMBER,C.EUSTOCKNUMBER) AS StockCode,
rtrim(ltrim(substr(AC.DESC_ALTERNATIVA,1,3))) AS Alt,
r.SIGLA as Regiao,
NVL(NC.DESCRICAO_REG,NC.DESCRICAO_GLO) AS DescCor,
M.DESC_MONTADORA AS Montadora,
RUC.ANO,
Q.SIGLA_QUALIDADE AS Qld,
FC.COD_COMP,
FC.QUANTIDADE as Qtd100gr,
F.COD_FORMULA,
decode(F.PE_PRATICO,0,f.PE_TEORICO,F.PE_PRATICO) as QualPE,
FC.ORDEM
FROM
REL_QUALIDADE_COR A, QUALIDADE Q, ALTERNATIVA_COR AC, COR C,
tmp_NOME_COR NC, FORMULA F, FORMULA_COMPONENTES FC, COMPONENTE COM, MONTADORA M, REGIAO R,
REL_USO_COR RUC ,
(
SELECT
F.COD_FORMULA,
sum(fc.QUANTIDADE) as Cgr
FROM
REL_QUALIDADE_COR A, QUALIDADE Q, ALTERNATIVA_COR AC, COR C, tmp_NOME_COR NC, FORMULA F, FORMULA_COMPONENTES FC, COMPONENTE COM
WHERE
A.COD_QUALIDADE IN (SELECT B.COD_QUALIDADE FROM LINHA_QUALIDADE B WHERE B.COD_LINHA_PRODUTO = 2) AND
A.COD_QUALIDADE = Q.COD_QUALIDADE AND
A.COD_ALTERNATIVA = AC.COD_ALTERNATIVA AND
AC.COD_COR = C.COD_COR AND
AC.COD_COR = NC.COD_COR AND AC.COD_REGIAO = NC.COD_REGIAO AND
A.COD_FORMULA_COR = F.COD_FORMULA_COR AND
F.COD_FORMULA = FC.COD_FORMULA AND
FC.COD_COMP = COM.COD_COMPONENTE
group BY
F.COD_FORMULA,f.PE_TEORICO,F.PE_PRATICO
) ww
WHERE
A.COD_QUALIDADE IN (SELECT B.COD_QUALIDADE FROM LINHA_QUALIDADE B WHERE B.COD_LINHA_PRODUTO = 2 ) AND
A.COD_QUALIDADE = Q.COD_QUALIDADE AND
A.COD_ALTERNATIVA = AC.COD_ALTERNATIVA AND
AC.COD_COR = C.COD_COR AND
AC.COD_COR = NC.COD_COR AND
AC.COD_COR = RUC.COD_COR AND
AC.COD_REGIAO = RUC.COD_REGIAO AND
AC.COD_REGIAO = NC.COD_REGIAO AND
A.COD_FORMULA_COR = F.COD_FORMULA_COR AND
F.COD_FORMULA = FC.COD_FORMULA AND
FC.COD_COMP = COM.COD_COMPONENTE and
ww.COD_FORMULA = F.COD_FORMULA AND
C.COD_MONTADORA = M.COD_MONTADORA AND
AC.COD_REGIAO = R.COD_REGIAO and 
Q.SIGLA_QUALIDADE = 'K' and
STATUS = 'Y' and
RUC.ANO < 1954
) mm)
ORDER BY
ANO,
DescCor,
Alt,
Qld,
COD_FORMULA,
ORDEM
FFernando
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 15
Registrado em: Ter, 18 Set 2007 7:52 pm
Localização: SP

já tentei utilizar o is null, ruc.ano = null, estou pensando em utilizar algum comando para que substitua todos os valores NULOS para 1 ou "
Como posso fazer isso?
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Ai vai uma dica brother:

Selecionar tudo

UPDATE TABELA_X
      SET CAMPO_Y = 1
  WHERE CAMPO_Y IS NULL;
Nota importante: Sempre atente-se à clausula Where.
FFernando
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 15
Registrado em: Ter, 18 Set 2007 7:52 pm
Localização: SP

Obrigado Trevisolli, vou testar daqui a pouco quando chegar no trabalho,
mas me tira uma duvida por gentileza.
Nos registros dessa empresa, já tem dados cadastrados com o campo ANO em branco, eu alterando o tipo desse campo para 1, ele mudará automaticamente TODOS os registros já cadastrados p 1??
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brother, seguinte...
Com o código abaixo:

Selecionar tudo

UPDATE TABELA_X
   SET ANO = 1
 WHERE ANO IS NULL;

Ele irá popular todos os registros, onde o ANO seja nulo, para ANO = 1.
qualquer coisa, manda ai.
FFernando
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 15
Registrado em: Ter, 18 Set 2007 7:52 pm
Localização: SP

opa, beleza cara?
obrigado pela ajuda, mas não posso executar esse comando na base do cliente, fiz esse select e na clausula where coloquei ano is nullele me retornou algumas informações com o campo ano em branco..
Mas mesmo assim, ainda falta algumas.. tem mta coisa amarrada nesse select... já to ficando doio.. to tentando descobrir o porque dele não tarzer alguns registros..

o que poderia fazer nesse select GIGANTESCO para retornar os resultados mais rapido???
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brother,

A melhor coisa seria realizar um Explain...
Verificar a utilização destes NVL's etc...
Responder
  • Informação
  • Quem está online

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