 |
ActiveDelphi .: O site do programador Delphi! :.
|
Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
aleshy Profissional

Registrado: Terça-Feira, 13 de Março de 2007 Mensagens: 627
|
Enviada: Qua Jan 18, 2012 1:40 pm Assunto: Erro ORA-01722: Invalid Number (Resolvido) |
|
|
Pessoal,
Nao estou achando resposta para este erro. Quando faco uma consulta simples na tabela do Oracle tipo: select * from PCNFSAID where DTSAIDA >= sysdate - 100 funciona normalmente.
O problema é que se eu faco a consulta acima na mesma tabela, apenas retornando os campos que quero e pedindo o resultado para DTSAIDA>= sysdate - 100 dá o erro de numero invalido. De -1 a -10 vai. Se eu colocar - 11 ai já da o erro... Alguem sabe o que pode ser?
Segue a consulta original:
Código: | select distinct(PCCLIENT.CODCLI), '2' as TIPOREGISTRO,
PCCLIENT.CODCLI as CODIGOCLIENTE,
PCCLIENT.TIPOFJ as TIPOPESSOA,
to_char(replace(replace(replace(CGCENT, '.', ''), '-', ''), '/', ''), 'FM000000000000000') as CNPJCPF,
substr(PCCLIENT.CLIENTE, 1, 60) as RAZAOSOCIAL, substr(PCCLIENT.FANTASIA, 1, 60) as FANTASIA,
PCNFSAID.CODUSUR as CODIGOVENDEDOR,
substr(PCCLIENT.ENDERCOB, 1, 70) as ENDERECO,
nvl(to_char(replace(replace(PCCLIENT.CEPCOB, '.', ''), '-', ''), 'FM00000000'), '40000000') as CEP,
nvl(to_char(PCCLIENT.CODATV1), '59') as TIPOESTABELECIMENTO,
'00' as QUANTIDADEVISITAS,
nvl(to_char(replace(replace(replace(PCCLIENT.TELCOB, '(', ''), ')', ''), '-', ''), 'FM000000000000000'), '000000000000000') as TELEFONE,
substr(PCCLIENT.EMAIL, 1, 50) as EMAIL,
substr(PCCLIENT.BAIRROCOB, 1, 50) as BAIRRO,
'000' as QUANTIDADECHECKOUTS
from PCCLIENT
inner join PCNFSAID on PCCLIENT.CODCLI = PCNFSAID.CODCLI
where PCNFSAID.DTSAIDA >= sysdate - 100 |
_________________ Alex Vieira
Desenvolvedor
Salvador - Ba
Editado pela última vez por aleshy em Qui Jan 19, 2012 12:36 pm, num total de 1 vez |
|
Voltar ao Topo |
|
 |
leogazio Colaborador


Registrado: Domingo, 18 de Fevereiro de 2007 Mensagens: 1047 Localização: Alto Paraná - PR
|
Enviada: Qua Jan 18, 2012 2:06 pm Assunto: Re: Erro ORA-01722: Invalid Number |
|
|
aleshy escreveu: | Pessoal,
Nao estou achando resposta para este erro. Quando faco uma consulta simples na tabela do Oracle tipo: select * from PCNFSAID where DTSAIDA >= sysdate - 100 funciona normalmente.
O problema é que se eu faco a consulta acima na mesma tabela, apenas retornando os campos que quero e pedindo o resultado para DTSAIDA>= sysdate - 100 dá o erro de numero invalido. De -1 a -10 vai. Se eu colocar - 11 ai já da o erro... Alguem sabe o que pode ser?
Segue a consulta original:
Código: | select distinct(PCCLIENT.CODCLI), '2' as TIPOREGISTRO,
PCCLIENT.CODCLI as CODIGOCLIENTE,
PCCLIENT.TIPOFJ as TIPOPESSOA,
to_char(replace(replace(replace(CGCENT, '.', ''), '-', ''), '/', ''), 'FM000000000000000') as CNPJCPF,
substr(PCCLIENT.CLIENTE, 1, 60) as RAZAOSOCIAL, substr(PCCLIENT.FANTASIA, 1, 60) as FANTASIA,
PCNFSAID.CODUSUR as CODIGOVENDEDOR,
substr(PCCLIENT.ENDERCOB, 1, 70) as ENDERECO,
nvl(to_char(replace(replace(PCCLIENT.CEPCOB, '.', ''), '-', ''), 'FM00000000'), '40000000') as CEP,
nvl(to_char(PCCLIENT.CODATV1), '59') as TIPOESTABELECIMENTO,
'00' as QUANTIDADEVISITAS,
nvl(to_char(replace(replace(replace(PCCLIENT.TELCOB, '(', ''), ')', ''), '-', ''), 'FM000000000000000'), '000000000000000') as TELEFONE,
substr(PCCLIENT.EMAIL, 1, 50) as EMAIL,
substr(PCCLIENT.BAIRROCOB, 1, 50) as BAIRRO,
'000' as QUANTIDADECHECKOUTS
from PCCLIENT
inner join PCNFSAID on PCCLIENT.CODCLI = PCNFSAID.CODCLI
where PCNFSAID.DTSAIDA >= sysdate - 100 |
|
Tenta TRUNC(SYSDATE - 100) ou TRUNC(SYSDATE) -100 e vê se resolve. Qual versão do Oracle? _________________ Leonardo Gazio - Consultoria e Suporte a Desenvolvedores.
Suporte para todo o Brasil via;
E-mail: leonardogazio@delphimasters.com
Msn: lngsmattos@hotmail.com
Claro: (21) 7301-7243 |
|
Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Qua Jan 18, 2012 2:15 pm Assunto: |
|
|
Não tenho experiência com Oracle, mas desconfio que o problema não está no "sysdate - 100" em si.
Desconfio o problema está no conteúdo de um dos campos de algum registro que está sendo retornado somente ao utilizar "sysdate - 11" ou "sysdate - 100", e que não é retornado ao utilizar "sysdate - 10".
Espero que seja útil.
_________________
Assinatura: Imoveis em Suzano |
|
Voltar ao Topo |
|
 |
leogazio Colaborador


Registrado: Domingo, 18 de Fevereiro de 2007 Mensagens: 1047 Localização: Alto Paraná - PR
|
Enviada: Qua Jan 18, 2012 2:39 pm Assunto: |
|
|
imex escreveu: | Não tenho experiência com Oracle, mas desconfio que o problema não está no "sysdate - 100" em si.
Desconfio o problema está no conteúdo de um dos campos de algum registro que está sendo retornado somente ao utilizar "sysdate - 11" ou "sysdate - 100", e que não é retornado ao utilizar "sysdate - 10".
Espero que seja útil.
_________________
Assinatura: Imoveis em Suzano |
Pois é Imex, agora que eu reparei no título ali, realmente, pode ser problema em algum registro em campo numérico, o jeito é ele ir eliminando os campos ali na query até achar o problema... _________________ Leonardo Gazio - Consultoria e Suporte a Desenvolvedores.
Suporte para todo o Brasil via;
E-mail: leonardogazio@delphimasters.com
Msn: lngsmattos@hotmail.com
Claro: (21) 7301-7243 |
|
Voltar ao Topo |
|
 |
aleshy Profissional

Registrado: Terça-Feira, 13 de Março de 2007 Mensagens: 627
|
Enviada: Qua Jan 18, 2012 10:51 pm Assunto: |
|
|
Realmente os colegas tem razao. Nao é o sysdate - 100 que dá o erro e sim o resultado retornado na coluna telefone (nvl(to_char(replace(replace(replace(PCCLIENT.TELCOB, '(', ''), ')', ''), '-', ''), 'FM000000000000000'), '000000000000000') as TELEFONE,
).
O que eu queria entender é porque ele dá erro de número inválido se eu transformo para CHAR e retiro alguns caracteres especiais?
Pelo menos sei que o resultado esta retornando valor nao numerico. Seria por causa do NVL? _________________ Alex Vieira
Desenvolvedor
Salvador - Ba |
|
Voltar ao Topo |
|
 |
leogazio Colaborador


Registrado: Domingo, 18 de Fevereiro de 2007 Mensagens: 1047 Localização: Alto Paraná - PR
|
Enviada: Qua Jan 18, 2012 11:22 pm Assunto: |
|
|
aleshy escreveu: | Realmente os colegas tem razao. Nao é o sysdate - 100 que dá o erro e sim o resultado retornado na coluna telefone (nvl(to_char(replace(replace(replace(PCCLIENT.TELCOB, '(', ''), ')', ''), '-', ''), 'FM000000000000000'), '000000000000000') as TELEFONE,
).
O que eu queria entender é porque ele dá erro de número inválido se eu transformo para CHAR e retiro alguns caracteres especiais?
Pelo menos sei que o resultado esta retornando valor nao numerico. Seria por causa do NVL? |
Qual o tipo de dados desse campo(TELCOB) lá no banco? É varchar2? _________________ Leonardo Gazio - Consultoria e Suporte a Desenvolvedores.
Suporte para todo o Brasil via;
E-mail: leonardogazio@delphimasters.com
Msn: lngsmattos@hotmail.com
Claro: (21) 7301-7243 |
|
Voltar ao Topo |
|
 |
aleshy Profissional

Registrado: Terça-Feira, 13 de Março de 2007 Mensagens: 627
|
Enviada: Qui Jan 19, 2012 12:35 pm Assunto: |
|
|
O campo é do tipo varchar(13).
O valor nao deveria ser retornado como não numerico, ja que o campo é do tipo varchar? O maximo que deveria ocorrer com usando o StrReplace é algum caracter nao tratato aparecer. Mas nao seria o caso.
Bom, achado o problema vou dar continuidade ao desenvolvimento, senao vou ficar parado tentando entender e nada sai do lugar.
Abracos ao colegas. _________________ Alex Vieira
Desenvolvedor
Salvador - Ba |
|
Voltar ao Topo |
|
 |
leogazio Colaborador


Registrado: Domingo, 18 de Fevereiro de 2007 Mensagens: 1047 Localização: Alto Paraná - PR
|
Enviada: Qui Jan 19, 2012 1:16 pm Assunto: |
|
|
aleshy escreveu: | Bom, achado o problema vou dar continuidade ao desenvolvimento, senao vou ficar parado tentando entender e nada sai do lugar |
Verdade. Valeu meu irmão, aquele abraço! _________________ Leonardo Gazio - Consultoria e Suporte a Desenvolvedores.
Suporte para todo o Brasil via;
E-mail: leonardogazio@delphimasters.com
Msn: lngsmattos@hotmail.com
Claro: (21) 7301-7243 |
|
Voltar ao Topo |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|