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

Problemas con tipo de datos lob en oracle 11g

Estas en el tema de Problemas con tipo de datos lob en oracle 11g en el foro de Oracle en Foros del Web. Buenos Días tengo un pequeño problema con tipo de dato long al hacer una consulta Ej: > CREATE TABLE T1 (DATOS LONG); > select * ...
  #1 (permalink)  
Antiguo 14/08/2009, 10:38
 
Fecha de Ingreso: julio-2009
Mensajes: 52
Antigüedad: 15 años, 4 meses
Puntos: 0
Problemas con tipo de datos lob en oracle 11g

Buenos Días tengo un pequeño problema con tipo de dato long al hacer una consulta Ej:

> CREATE TABLE T1 (DATOS LONG);


> select * from t1 --y no hay error


> select datos from t1 --y no hay error


> select datos from t1 where datos like '%R%' --tipos de dato inconsistentes: se esperaba - se ha obtenido LONG


> select datos from t1 where to_lob(datos) like '%R%' --tipos de dato inconsistentes: se esperaba - se ha obtenido LONG


> select datos from t1 where to_lob(datos) like to_lob('%R%') --tipos de dato inconsistentes: se esperaba - se ha obtenido LONG



> select datos from t1 where datos like to_lob('%R%') --tipos de dato inconsistentes: se esperaba - se ha obtenido LONG



> select to_lob(datos) from t1 --tipos de dato inconsistentes: se esperaba - se ha obtenido LONG


En todas las documentaciones de este tipò de datos aparece que se soluciona con la funcion to_lob pero en este caso nada de nada.
  #2 (permalink)  
Antiguo 14/08/2009, 14:40
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 10 meses
Puntos: 360
Respuesta: Problemas con tipo de datos lob en oracle 11g

Para solo visualizaciòn, no es posible hacer este tipo de conversiòn.

Fijate en esto:

Código sql:
Ver original
  1. SQL> CREATE TABLE lob_table(datos long);
  2.  
  3. Tabla creada.
  4.  
  5. SQL> INSERT INTO lob_table VALUES('daniel');
  6.  
  7. 1 fila creada.
  8.  
  9. SQL> SELECT *FROM lob_table;
  10.  
  11. DATOS
  12. --------------------------------------------------------------------------------
  13. daniel
  14.  
  15. SQL> SELECT to_lob(datos) FROM lob_table;
  16. SELECT to_lob(datos) FROM lob_table
  17.        *
  18. ERROR en linea 1:
  19. ORA-00932: tipos de dato inconsistentes: se esperaba - se ha obtenido LONG
  20.  
  21.  
  22. SQL> CREATE TABLE lob_table2(datos CLOB);
  23.  
  24. Tabla creada.
  25.  
  26. SQL> INSERT INTO lob_table2 SELECT datos FROM lob_table;
  27. INSERT INTO lob_table2 SELECT datos FROM lob_table
  28.                               *
  29. ERROR en linea 1:
  30. ORA-00997: uso no valido del tipo de dato LONG
  31.  
  32.  
  33. SQL>  INSERT INTO lob_table2 SELECT to_lob(datos) FROM lob_table;
  34.  
  35. 1 fila creada.
  36.  
  37. SQL> SELECT *FROM lob_table2;
  38.  
  39. DATOS
  40. --------------------------------------------------------------------------------
  41. daniel
  42.  
  43. SQL>

Ese es el verdadero uso de la funciòn to_lob

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 17/08/2009, 04:36
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 17 años, 1 mes
Puntos: 85
Respuesta: Problemas con tipo de datos lob en oracle 11g

Es importante tener en mente que los tipos de datos LONG están discontinuados, y los tipos de datos LOB son los que lo reemplazan, si estás creando un modelo de datos nuevos, lo mejor es utilizar LOBs, también puedes buscar información sobre la api DBMS_LOB.

Por otro lado, y esto es más una idea generalizada, si te encuentras en la situación de tener que realizar búsquedas por campos LOB (..where campo_lob like '%valor%'..), puede que tengas un problema con el diseño.

Saludos
  #4 (permalink)  
Antiguo 17/08/2009, 08:55
 
Fecha de Ingreso: julio-2009
Mensajes: 52
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Problemas con tipo de datos lob en oracle 11g

En realidad ya lo resolvi el mismo viernes, la solucion esta en crear una tabla a partir de la consulta cuando se incluya el tipo de datos long haciendo al conversion correspondiente al tip de datos clob y el uso que le estoy haciendo es logico que no es para un modelo de datos nuevo debido a que reconozco que el tipo de datos long tiene un peso de 2GB en adelante y solo lo usan las tablas del sistema, es solo para hacer un procedimiento de replica exacta de objetos entre usuarios sin necesidad de ejecutar import y export.


Gracias de igual forma anexo la solucion que me funcionó para tratar el tipo de datos long:

vSql:='create table tipo_long as (select constraint_name, to_lob(search_condition)valor_long from all_constraints where constraint_type=''C'' and owner=''' || pUserOrigen || ''')';
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 14:40.