dúvida cruel - string para números

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
eduzue
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 5
Registrado em: Sex, 12 Mai 2006 7:09 pm
Localização: São Paulo

Olá, pessoall, sou novo aqui no fórum, e queria tirar uma dúvida...

Selecionar tudo

SELECT IDcliente, CODcliente FROM cliente WHERE (CODcliente = 123);
O tipo do campo codcliente é varchar2(6). Tenho uns bancos instalados aqui, e estou com uma dúvida cruel...

em um banco de versão 9i, ele dá número inválido, justamente no número que coloquei, e outro banco, o que está na minha máquina, que é 8.1.7, ele funciona corretamente, sem dar mensagens de inconsistência...

Alguém sabe me dizer se é alguma configuração do Oracle? Erro não acredito que seja, pois testei no 8.1.6, e também dá número inválido.
Obrigado. :roll:
gilbertoca
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 372
Registrado em: Ter, 24 Jan 2006 3:33 pm
Localização: Palmas - TO
Contato:

eduzue, se o campo é varchar2 você deveria usar aspas, não?

Selecionar tudo

WHERE (CODcliente = '123'); 
eduzue
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 5
Registrado em: Sex, 12 Mai 2006 7:09 pm
Localização: São Paulo

E seria o correto, no caso. Porém, estou com uma versão do sistema que não posso mudar, pois isso implicaria em deslocar a equipe e tal... ou seja, em breve faremos...
Então essa versão só faz deste jeito, só que em alguns clientes ele funciona, outros não, de acordo com o que falei das versões... Por isso a pergunta: seria uma versão do Oracle?
Muito obrigado!
gilbertoca
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 372
Registrado em: Ter, 24 Jan 2006 3:33 pm
Localização: Palmas - TO
Contato:

Vamos ver se entendi!

Você tem um sistema instalado que acessa algumas versões diferentes do banco oracle e você não pode modificar a consulta em questão, certo?.

Então podemos fazer um teste nas versões do oracle instaladas!
Por exemplo, este que acabo de fazer em nosso banco de testes:
Banco: 10g RC1
OS:Linux

Selecionar tudo

CREATE TABLE CLIENTE(
IDCLIENTE NUMBER NOT NULL,
CDCLIENTE VARCHAR2(6),
NOME VARCHAR2(50),
CONSTRAINT "CLIENTE_PK" PRIMARY KEY(IDCLIENTE)
)

INSERT INTO CLIENTE VALUES(1, '100', 'PRIMEIRO');
INSERT INTO CLIENTE VALUES(2, '150', 'SEGUNDO');
INSERT INTO CLIENTE VALUES(3, '180', 'TERCEIRO');

SELECT * FROM CLIENTE;
SELECT * FROM CLIENTE WHERE CDCLIENTE = 180;
SELECT * FROM CLIENTE WHERE CDCLIENTE = '180';

Selecionar tudo

gilberto@TI-DES05:~> sqlplus test/test@desenv

SQL*Plus: Release 10.1.0.4.2 - Production on Mon May 15 12:02:22 2006

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


Connected to:
Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - Production
With the Partitioning, OLAP and Data Mining options

c_ergon@DESENV> SELECT * FROM CLIENTE WHERE CDCLIENTE = 180;

 IDCLIENTE CDCLIE NOME
---------- ------ --------------------------------------------------
         3 180    TERCEIRO

c_ergon@DESENV>
Faça o mesmo nas versões que você possui!
Espero ter ajudado.
Gilberto
eduzue
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 5
Registrado em: Sex, 12 Mai 2006 7:09 pm
Localização: São Paulo

Gilberto pela dica... fiz uns testes, mas não consegui chegar a um denominador comum entre eles... Pois somente esse deu erro.

Essa é a versão da que não funciona...

Selecionar tudo

Oracle8i Release 8.1.7.4.1 - Production                           
PL/SQL Release 8.1.7.4.0 - Production                             
CORE	8.1.7.2.1	Production                                         
TNS for 32-bit Windows: Version 8.1.7.4.0 - Production            
NLSRTL Version 3.4.1.0.0 - Production   
fiz em outro que funcionou, e é a mesma versão....
Só para a informação de vocês, acredito que seja uma configuração do Oracle mesmo...

Selecionar tudo

Oracle8i Release 8.1.7.4.1 - Production                           
PL/SQL Release 8.1.7.4.0 - Production                             
CORE	8.1.7.2.1	Production                                         
TNS for 32-bit Windows: Version 8.1.7.4.0 - Production            
NLSRTL Version 3.4.1.0.0 - Production  

Mesmo assim, muito obrigado, Gilberto!
Espero poder comentar em outros tópicos.
eduzue
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 5
Registrado em: Sex, 12 Mai 2006 7:09 pm
Localização: São Paulo

e só pra complementar, era essa mesmo a dúvida...não poderia trocar a versão, pois sempre fará a mesma query...
Obrigado!
gilbertoca
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 372
Registrado em: Ter, 24 Jan 2006 3:33 pm
Localização: Palmas - TO
Contato:

Mesmo assim, muito obrigado, Gilberto!
De nada! Bom, não foi lá uma grande ajuda, mas alguém para discutir um problema é sempre bom! Principalmente em se trantando desde software.
Espero poder comentar em outros tópicos.
Muito bom! Seja bem vindo!

Gilberto
eduzue
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 5
Registrado em: Sex, 12 Mai 2006 7:09 pm
Localização: São Paulo

cara, descobri o que acontece...ufffaaaa

O seguinte: o campo que eu estava tentando dar o select, nesse cliente, havia alguns registros que não eram caracter válido, no caso, números, tinha um registro com '.' (ponto), e aí coloquei ele pra null... Então, todos os registros ficaram como números.

Logo depois, foi possível fazer novamente o select...
Acredita?
Abraço.
gilbertoca
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 372
Registrado em: Ter, 24 Jan 2006 3:33 pm
Localização: Palmas - TO
Contato:

Boa edu! Legal saber que você conseguiu!
Melhor ainda, é nos mostrar a solução!
Parabéns, é assim que agente aprende e o melhor, repassar o conhecimento.

Gilberto
Responder
  • Informação
  • Quem está online

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