Ver Mensaje Individual
  #2 (permalink)  
Antiguo 13/03/2008, 09:48
Avatar de matanga
matanga
 
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 6 meses
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