Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Oracle retorna una sola columna

Estas en el tema de Oracle retorna una sola columna en el foro de Oracle en Foros del Web. Holas a todos. Tengo un programa escrito en Delphi 5 que se conecta por ODBC a una base Oracle 10g. Como dato extra, esta base ...
  #1 (permalink)  
Antiguo 10/09/2009, 17:10
Avatar de quinqui  
Fecha de Ingreso: agosto-2004
Ubicación: Chile!
Mensajes: 776
Antigüedad: 19 años, 8 meses
Puntos: 56
Pregunta Oracle retorna una sola columna *CERRADO*

Holas a todos.

Tengo un programa escrito en Delphi 5 que se conecta por ODBC a una base Oracle 10g. Como dato extra, esta base la tenemos replicada en varios servidores, para efectos de prueba: 2 en linux Ubuntu 9.04 y uno en Windows XP.

En el programa yo hago una consulta X, que solicita 3 campos de una tabla, pero cuando recorro el resultado, me dice que la tabla resultado tiene una sola columna O_o Y lo más raro, que le da con mostrarme un cierto campo, que si elimino ese campo de la query, me sale que el resultado tiene cero columnas, aunque las otras sigan allí O_O!! Todo esto pasa en el servidor Oracle Windows XP.

Ejecuto esta query en un cliente cualquiera y me retorna las 3 columnitas bellas y completitas. Pero no pasa así en el programa.

Ahora, para acabar la pesadilla, cuando conecto el programa a otro de los servidores (linux), me retorna las 3 columnas!!!!

Mi pregunta es ¿será problema del servidor Oracle, de permisos, de mi ODBC, de S.O., de qué?

Estoy chata, como decimos en Chile. Agradecería sus comentarios, que estando pegada en el problema (y con ayuda de 4 colegas sin conseguir resultado) creo que ya no veo por dónde podrá partir el drama.

Muchas gracias por anticipado, y espero sus comentarios :)



PD: Por si sirve de dato extra, somos ultra novatos en Oracle.
__________________
pipus.... vieeeeeji plomius!!!
*quinqui site*

Última edición por quinqui; 03/11/2009 a las 10:01 Razón: Gracias, el tema está finiquitado :)
  #2 (permalink)  
Antiguo 11/09/2009, 06:40
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Oracle retorna una sola columna

Serviría si pusieras la estructura de las tablas y la forma como tratas de accederla.
Verifica que las replicas en las 3 bases de datos sean iguales y coincidan en el numero de campos.
saludos quinqui
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 11/09/2009, 08:38
Avatar de quinqui  
Fecha de Ingreso: agosto-2004
Ubicación: Chile!
Mensajes: 776
Antigüedad: 19 años, 8 meses
Puntos: 56
Respuesta: Oracle retorna una sola columna

Hola huesos ^^

Hoy hicimos otras pruebas con mis compañeros de trabajo, y nos asombramos aun más de la locura de situación que hay aquí. Lo que hicimos fue:

- Realizar una consulta por todos los campos (*) a cualquiera de las tablas de la base.
- El resultado retornó todas las columnas SALVO las de tipo String O_O!! En todos los intentos (consultas) que hicimos.

No sabemos, pues, si el problema proviene de la configuración del servidor Oracle (Win), de mi ODBC o de Delphi.

Por cierto, las replicas de los servidores son exactas.
La forma de consultar la vez primera era algo como esto:

Código:
SELECT t2.NUMERO, t1.CODIGO, t2.FECHA, t2.NOMBRE 
FROM tabla1 t1 INNER JOIN tabla2 t2 ON t1.CODIGO = t2.CODIGO 
WHERE t2.ESTADO = 1
ORDER BY t2.NUMERO
Donde CODIGO y NOMBRE son tipo String, y no me los muestra. Ni siquiera es que me los retorne nulos o vacíos: simplemente no existen en el resultado. Algo como:

Código:
+--------+------------+
| NUMERO | FECHA
+--------+------------+
| 100000 | 2009-09-11
| 200000 | 2009-09-12
+--------+------------+
Como dije antes, hicimos una query mucho más simple, y pasó lo mismo: pusimos el asterisco en vez de los campos, y nos retornó todos SALVO los tipo String x______x

Mientras seguimos buscando las respuestas, yo he optado por continuar trabajando el programa con el servidor que sí funciona, y cuando termine volver a retomar el problema con el servidor problemático.

¿Qué opinan ustedes? Les dejo la inquietud, agradeciendo de antemano su buena voluntad.
Hasta pronto
__________________
pipus.... vieeeeeji plomius!!!
*quinqui site*
  #4 (permalink)  
Antiguo 11/09/2009, 08:54
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Oracle retorna una sola columna

Cuando te refieres a tipo string, es varchar2?

haz una descripción de las tablas y postea el resultado.

Código SQL:
Ver original
  1. SQL>DESCRIBE tabla1;
  2.  
  3. SQL>DESCRIBE tabla2;
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 11/09/2009, 09:15
Avatar de quinqui  
Fecha de Ingreso: agosto-2004
Ubicación: Chile!
Mensajes: 776
Antigüedad: 19 años, 8 meses
Puntos: 56
Respuesta: Oracle retorna una sola columna

Los tipos de datos serían algo como:

Código:
tabla1
----------
FECHA TIMESTAMP PK
CODIGO VARCHAR2(6 CHAR) PK/FK
DATO1 NUMBER(9)
DATO2 NUMBER(9)

tabla2
----------
CODIGO VARCHAR2(6 CHAR) PK
NUMERO NUMBER(5)
NOMBRE VARCHAR2(40 CHAR)
FECHA TIMESTAMP
ESTADO NUMBER(1)
(Disculpa que no ponga la estructura real de las tablas, pero es por motivos de seguridad de la empresa. Como sea, los tipos sí son los mismos que los originales.)

Gracias de nuevo.
__________________
pipus.... vieeeeeji plomius!!!
*quinqui site*
  #6 (permalink)  
Antiguo 11/09/2009, 09:21
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Oracle retorna una sola columna

Me llama la atención la forma como los declaras.
Cita:
CODIGO VARCHAR2(6 CHAR)
Nunca había visto una declaración así de un varchar2. De seguro, eso te puede estar generando el problema.
Justo son los 2 campos declarados así, los que no se muestran.

Tienes una explicación para la forma como los declaras?

haz lo siguiente:

Código sql:
Ver original
  1. ALTER TABLE tabla1 MODIFY codigo varchar2(6);
Código sql:
Ver original
  1. ALTER TABLE tabla1 MODIFY nombre varchar2(40);

y prueba nuevamente

Nos cuentas como te va.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #7 (permalink)  
Antiguo 11/09/2009, 10:27
Avatar de quinqui  
Fecha de Ingreso: agosto-2004
Ubicación: Chile!
Mensajes: 776
Antigüedad: 19 años, 8 meses
Puntos: 56
Respuesta: Oracle retorna una sola columna

La verdad, es que la base la modeló un compañero. En el esquema de tablas el programa modelador colocó los tipos así. Como te decía en un principio, somos ultra novatos en este motor de datos. (Yo estaba acosumbrada a Mysqlcito, jejeje :P).

Código:
tabla1
----------
FECHA NOT NULL TIMESTAMP
CODIGO NOT NULL VARCHAR2(6)
DATO1 NUMBER(9)
DATO2 NUMBER(9)

tabla2
----------
CODIGO NOT NULL VARCHAR2(6)
NUMERO NUMBER(5)
NOMBRE VARCHAR2(40 CHAR)
FECHA TIMESTAMP
ESTADO NUMBER(1)
Esa es la forma como me lo retornaría la instrucción DESCRIBE que me diste.
__________________
pipus.... vieeeeeji plomius!!!
*quinqui site*
  #8 (permalink)  
Antiguo 11/09/2009, 10:28
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Oracle retorna una sola columna

Haz nuevamente el select para ver si soluciona tu problema
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #9 (permalink)  
Antiguo 03/11/2009, 07:38
Avatar de quinqui  
Fecha de Ingreso: agosto-2004
Ubicación: Chile!
Mensajes: 776
Antigüedad: 19 años, 8 meses
Puntos: 56
Respuesta: Oracle retorna una sola columna

Holas de nuevo.

Sólo escribo para decir que pillamos el origen del problema. Efectivamente, se trataba de la definición de tipos de datos de la tabla consultada.

Aunque no entiendo la profundidad del caso, el hecho fue que haciendo la consulta sobre los datos declarados como VARCHAR2(6 BYTE) funcionaba la cosa en todos los servidores, pero si poníamos VARCHAR2(6 CHAR) se caía. O sea, como ven, cambiaba si se definía que los elementos del VARCHAR2 eran BYTE o CHAR, válgame el cielo. (Todo esto usando sqlDeveloper, por si acaso.)

Esop. Ojalá este detallito ayude a otros :)
__________________
pipus.... vieeeeeji plomius!!!
*quinqui site*
  #10 (permalink)  
Antiguo 03/11/2009, 09:00
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 16 años, 10 meses
Puntos: 43
Respuesta: Oracle retorna una sola columna

Pues no sé, pero mira

Código:
SQL*Plus: Release 8.0.5.0.0 - Production on Mar Nov 3 15:55:51 2009

(c) Copyright 1999 Oracle Corporation.  All rights reserved.


Conectado a:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> create table prueba_jc3000
  2  (
  3  CODIGO VARCHAR2(6 CHAR) ,
  4  NUMERO NUMBER(5),
  5  NOMBRE VARCHAR2(40 CHAR),
  6  FECHA TIMESTAMP,
  7  ESTADO NUMBER(1)   
  8  );

Tabla creada.

SQL> insert into prueba_jc3000
  2  values
  3  ('1',1,'carlos',sysdate,1);

1 fila creada.

SQL> commit;

Validación terminada.

SQL> select * from prueba_jc3000;
select * from prueba_jc3000
              *
ERROR en línea 1:
ORA-03115: unsupported network datatype or representation


SQL> select codigo from prueba_jc3000;

CODIGO
------
1

SQL> select nombre from prueba_jc3000;

NOMBRE
----------------------------------------
carlos

SQL> select codigo,nombre from prueba_jc3000;

CODIGO NOMBRE
------ ----------------------------------------
1      carlos

SQL> drop table prueba_jc3000 purge;

Tabla borrada.

SQL> create table prueba_jc3000
  2  (
  3  CODIGO VARCHAR2(6 CHAR) ,
  4  NUMERO NUMBER(5),
  5  NOMBRE VARCHAR2(40 CHAR),
  6  FECHA date,
  7  ESTADO NUMBER(1)   
  8  );

Tabla creada.

SQL> insert into prueba_jc3000
  2  values
  3  ('1',1,'carlos',sysdate,1);

1 fila creada.

SQL> commit;

Validación terminada.

SQL> select * from prueba_jc3000;

CODIGO    NUMERO NOMBRE                                   FECHA       ESTADO
------ --------- ---------------------------------------- -------- ---------
1              1 carlos                                   03/11/09         1

SQL> select codigo from prueba_jc3000;

CODIGO
------
1

SQL> select nombre from prueba_jc3000;

NOMBRE
----------------------------------------
carlos

SQL>  select codigo,nombre from prueba_jc3000;

CODIGO NOMBRE
------ ----------------------------------------
1      carlos

SQL> drop table prueba_jc3000 purge;

Tabla borrada.

SQL>
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:53.