Usar LONG VARCHAR en Oracle

Un problema que me surgió con Oracle es que al usar LONG VARCHAR o LONG de algún tipo no puedo hacer una simple consulta usando LIKE o algún otro operador.

Según leí, LONG es un tipo de datos que se descartará en futuras versiones de Oracle. A cambio de LONG, se recomienda usar LOB (Large Object). Pero a veces la realidad (el trabajo) nos obliga a usar un formato que es casi obsoleto.

Tenemos una tabla por ejemplo:

MiTabla (
idObjeto NUMBER;
codigo LONG VARCHAR;
);

no puedo hacer un simple SELECT como

SELECT *
FROM MiTabla
WHERE codigo LIKE 'algo';

porque recibiría el siguiente error

ORA-00932: inconsistent datatypes

Cause: You tried to perform an operation between two different datatypes, but the datatypes are not compatible.

Para más información, ver Oracle/PLSQL: ORA-00932 Error – Tech On The Net

¿Qué se puede hacer? Bueno, la solución más prolija sería usar CLOB en vez de LONG VARCHAR.
Pero si ya tenemos datos y hacer un ALTER TABLE nos resultara costoso, entonces otra opción sería tener una tabla temporal.

Este es un ejemplo sin usar PL/SQL porque la solución que estaba buscando era NO usar PL/SQL (y tampoco se).

MiTablaTemporal (
idObjeto NUMBER;
codigo CLOB;
);

y hacer una inserción
como por ejemplo

INSERT INTO MiTablaTemporal (idObjeto, codigo)
SELECT idObjeto, to_lob(codigo)
FROM MiTabla
WHERE idObjeto = -- esta última línea no es necesaria, solo es un ejemplo

y después

SELECT *
FROM MiTablaTemporal
WHERE codigo LIKE 'algo';

Supongo que hay tantas soluciones como nuestro ingenio nos permita.

Un script que encontré:
LONG to VARCHAR2 Function

Anuncios

3 comments

  1. Hola a todo nuevamente, lo que hice para que me saliera fue hacer este código:

    SELECT COD_DIRECCION,TRIM(TO_CHAR(DSC_DIRECCION)) “DSC_DIRECCION” FROM EX_TEMPORAL_DIRECCION;

Antes de darle al botón "Publicar" y mandar todo al carajo, te recomiendo que respires hondo y leas las FUQ que te iluminarán el camino :)

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s