Insertar una cadena larga en tipo de dato CLOB en Oracle
Oracle desde la versión 8i nos provee un tipo de dato llamado LOB, el cual nos permite almacenar largas estructuras de información estructurada y no estructurada como texto , gráficos, audio y video. Asimismo la información multimedia puede residir tanto en la misma base de datos como en el sistema operativo. Este tipo de dato se crea en reemplazo a los tipos de datos antiguos que existían como: LONG, RAW y LONG RAW debido a todos las restricciones y problemas de mantenimiento que presentaban.
La capacidad máxima que un LOB puede albergar es de 4 GB.
Los LOBS se categorizan en CLOB (almacenan texto que contiene grandes cantidades de bytes), NCLOB (es similar al CLOB solo que almacena texto cuyo juego de caracteres está definido por el National Character Set de la base de datos), BLOB (almacena información multimedia dentro de la base de datos), BFILE (similar al BLOB solo que la información multimedia está almacenada en el sistema operativo).
Insertando a tipo de dato CLOB
Un ejemplo sencillo se da a continuación para insertar una larga, cadena en un tipo de dato CLOB.
El tipo de dato VARCHAR2 longitud variable con un tamaño máximo de 4000 bytes, por lo tanto si necesitemos insertar un texto mas larga entonces el tipo de CLOB es una opción.
No se puede insertar datos directamente en el tipo de dato CLOB, usted tiene que utilizar la función EMPTY_CLOB().
Nota: La función EMPTY_CLOB asegura que no habrá ningún valor en el campo mientras el valor NULL almacena el valor NULO.
Puede ver tipos datos en Oracle:
Utilizar dbms_lob.write procedimiento para escribir los datos. Porque si va a tratar de insertar directamente una larga cadena en la columna CLOB, recibirá el siguiente error ORA-01704: string literal too long, mientras inserta los datos.
Aquí está el ejemplo de bloque PL/SQL para insertar una cadena larga en una columna CLOB.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
DECLARE V_CLOB CLOB; BEGIN INSERT INTO TEMP_CLOB (CODIGO, TEXTO_LARGO) VALUES (1, EMPTY_CLOB()) RETURNING TEXTO_LARGO INTO V_CLOB; DBMS_LOB.WRITE(V_CLOB, LENGTH('Proporcionar una cadena larga aquí'), 1,'Proporcionar una cadena larga aquí'); COMMIT; END; |
En conclusión.- La versión Oracle Database 11g, 12c ha hecho varias mejoras sobre los LOB presentando una nueva propuesta llamada Secure Files, el cual entrega mejores tiempos de respuesta en el acceso a los datos, ahorro en espacio y seguridad.