Icono del sitio Kiú

Modificar una columna de VARCHAR2 a CLOB en una tabla en Oracle

Hoy me ha tocado modificar columnas en una tabla de las cuales las tengo en VARCHAR2 y las quiero pasar a CLOB, por ese motivo hago este post porque puede ser que a alguien también lo necesite.  Si alguien sabe un método mejor por favor que lo comparta!

Ante todo veamos estos dos tipos de datos. En Oracle, los tipos de datos VARCHAR2 y CLOB son diferentes en términos de su capacidad de almacenamiento y su forma de manipulación.

Veamos cuales son algunas de las diferencias adicionales entre VARCHAR2 y CLOB:

  1. Tamaño de almacenamiento: VARCHAR2 está limitado a 4000 bytes de almacenamiento, mientras que CLOB puede almacenar grandes cantidades de datos (hasta 128 terabytes).
  2. Manipulación de datos: los valores de VARCHAR2 se pueden manipular mediante operaciones de cadena de caracteres estándar como SUBSTR, INSTR y LENGTH, mientras que los CLOB requieren funciones especiales de manipulación de datos como DBMS_LOB.
  3. Índices: VARCHAR2 se puede indexar con índices estándar, mientras que los índices de CLOB se manejan de manera diferente y se utilizan índices especiales de texto completo.
  4. Rendimiento: VARCHAR2 es generalmente más rápido que CLOB, especialmente en operaciones que involucran búsquedas y comparaciones de cadenas de caracteres. Los CLOB requieren más recursos de almacenamiento y procesamiento.

El tipo de datos CLOB no es compatible con el VARCHAR2 es por eso que no podemos directamente hacer el cambio de tipo de datos pero además de ello tampoco podemos hacer el cambio de tipo de una columna de la tabla si esa columna tiene datos.

Para realizar esto, ante todo hacemos una copia de seguridad de la tabla con que vamos a trabajar :). No vaya a ser que…….

Estos son los pasos que he realizado para lograrlo:

Veamos un ejemplo de esta operación:

-- Agregar una nueva columna de tipo CLOB 
ALTER TABLE mi_tabla ADD mi_clob CLOB; 

-- Copiar los valores de la columna VARCHAR2 a la nueva columna 
CLOB UPDATE mi_tabla SET mi_clob = mi_varchar2; 

-- Eliminar la columna VARCHAR2 original 
ALTER TABLE mi_tabla DROP COLUMN mi_varchar2; 

-- Renombrar la nueva columna CLOB con el nombre de la columna VARCHAR2 original 
ALTER TABLE mi_tabla RENAME COLUMN mi_clob TO mi_varchar2;

Es importante tener en cuenta que este proceso puede ser lento y consumir muchos recursos si la tabla es grande. Además, es posible que la tabla deba estar inactiva durante el proceso de conversión, lo que puede afectar la disponibilidad del sistema. Por lo tanto, te recomiendo realizar este proceso cuidadosamente y en un ambiente de pruebas antes de aplicarlo en un entorno de producción. 🙂

Espero sea de utilidad 🙂

Actualización

¡Resulta y acontece que mi deseo de aprender cada día más, ha sido escuchado! Al publicar este post en Twitter mi amigo Javier Morales me comentó que hay una forma mucho mejor de realizar esta conversión y encima en caliente sin dejar latencias porque yo estoy en un momento eliminando la columna y renombrando, por eso quiero que veas este video donde él me cuenta una forma espectacular de realizar esta conversión de varchar2 a clob ¡que te vas a quedar con los ojos abiertos!

Salir de la versión móvil