Ordenación usando un campo CLOB en Oracle
En ocasiones podemos necesitar ordenar una tabla por el contenido de un campo de
tipo CLOB
. Sin embargo, nos encontramos con que Oracle no permite usar
directamente este tipo de campos en la cláusula ORDER BY
y tampoco nos provee
de ninguna función para convertir dichos valores a VARCHAR2
.
No obstante, podemos recurrir a las funciones contenidas en el paquete
dbms_lob
para extraer parte del contenido del campo como un valor VARCHAR2
y así poder ordenar por dicho valor.
El truco está en usar la función dbms_lob.substr()
para extraer los primeros
N caracteres del campo y ordenar por el valor obtenido, de esta forma:
SELECT * FROM tabla ORDER BY dbms_lob.SUBSTR(campo, 50, 1);
En el ejemplo anterior ordenaríamos mediante los primeros 50 caracteres del campo, que debería ser suficiente en la mayoría de los casos.