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
  

Mensagemem Sex, 12 Mai 2006 7:23 pm

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

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:
eduzue
Localização: São Paulo

Mensagemem Sáb, 13 Mai 2006 9:50 pm

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

Código: Selecionar todos
WHERE (CODcliente = '123');
gilbertoca
Localização: Palmas - TO


Mensagemem Seg, 15 Mai 2006 12:00 am

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!
eduzue
Localização: São Paulo

Mensagemem Seg, 15 Mai 2006 12:12 pm

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

Código: Selecionar todos
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';


Código: Selecionar todos
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
gilbertoca
Localização: Palmas - TO


Mensagemem Seg, 15 Mai 2006 12:49 pm

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...

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...

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
Localização: São Paulo

Mensagemem Seg, 15 Mai 2006 12:53 pm

e só pra complementar, era essa mesmo a dúvida...não poderia trocar a versão, pois sempre fará a mesma query...
Obrigado!
eduzue
Localização: São Paulo

Mensagemem Seg, 15 Mai 2006 2:10 pm

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
gilbertoca
Localização: Palmas - TO


Mensagemem Ter, 16 Mai 2006 5:02 pm

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.
eduzue
Localização: São Paulo

Mensagemem Sex, 19 Mai 2006 2:35 pm

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
gilbertoca
Localização: Palmas - TO




Voltar para SQL

Quem está online

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