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

Insertar informacion a campos CLOB

Estas en el tema de Insertar informacion a campos CLOB en el foro de Oracle en Foros del Web. Buen Dia. Trabajo con: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production With the Partitioning, OLAP and Oracle Data Mining options JServer Release 9.2.0.1.0 - Production ...
  #1 (permalink)  
Antiguo 13/03/2008, 08:33
 
Fecha de Ingreso: marzo-2008
Mensajes: 3
Antigüedad: 16 años, 8 meses
Puntos: 0
Insertar informacion a campos CLOB

Buen Dia.

Trabajo con:
Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production

Tengo una base de datos con aproximadamente 400 tablas y de estas 50 tienen campos tipo CLOB, campos que por lo que entiendo no tienen restricciones de tamaño, trabajo jsp y java y para ingresar datos a las tablas lo hago por medio de SQL estandar.

El problema es que al ingresar en los formularios textos de mas de 3999 caracteres me genera error y no me inserta la informacion en la tabla en los campos CLOB, pero si el texto es de 3999 caracteres o menos la insercion de la informacion la hace sin ningun problema.

Como puedo o que debo hacer para ingresar informacion de mas de 3999 caracteres desde un formulario a una tabla con campos de tipo CLOB.


Agradezco su colaboración.


Alejandro Cardona J.
[email protected]
  #2 (permalink)  
Antiguo 13/03/2008, 09:48
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 17 años
Puntos: 85
Re: Insertar informacion a campos CLOB

Hola,

El tema de los 3999 caracteres viene de la conversion implicita de VARCHAR2 a CLOB, me explico.

Cuando realizas un insert con SQL, como por ejemplo

Código:
SQL> desc t1
 Nombre                                    ┐Nulo?   Tipo
 ----------------------------------------- -------- --------------------
 ID                                                 NUMBER
 DATA                                               CLOB

SQL> insert into t1 values (1,'Este string es un tipo varchar');

1 fila creada.

SQL> commit;

Confirmaci¾n terminada.

SQL>
En la cadena del insert no puedes superar los 4k (4000 caracteres) dado que Oracle lo interpreta como VARCHAR2 al momento de hacer el parseo de la sentencia SQL y lo convierte a CLOB al momento de hacer el insert.

Si necesitas hacer insert con SQL o PL/SQL debes utilizar el paquete DBMS_LOB, que es la API que provee Oracle para el manejo de LOBs, si el insert lo haces a traves de algun provider, JDBC me imagino, tienes que leer sobre el soporte JDBC para LOBs.

Pd,

Cita:
campos que por lo que entiendo no tienen restricciones de tamaño
Si tienen, 4G y se almacenan en un segmento diferente a la tabla, como dato curioso te comento que, si el valor del campo LOB en una fila determinada tiene menos de 4K, Oracle lo almacena en el mismo segmento que la tabla para poder acceder mas rapido.

Este comportamiento se puede cambiar con el parametro DISABLE_STORAGE_IN_ROW de los segmentos LOBs.

Saludos
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 04:21.