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
esto pasa porque ORACLE crea sus “estándares”, y complicarte la vida nomás (no en este caso)