Deberá convertir el CLOB en un Varchar para poder hacer el ordenamiento. Lamentablemente, las columnas Varchar están limitadas a 4000 caracteres en Oracle. Si la clasificación por los primeros 4000 caracteres es razonable, aquí hay un ejemplo usando SQLPlus DBMS_LOB.SUBSTR:
SQL> create table mytable (testid int, sometext clob);
Table created.
SQL> insert into mytable values (1, rpad('z',4000,'z'));
1 row created.
SQL> update mytable set sometext = sometext || sometext || sometext;
1 row updated.
SQL> select length(sometext) from mytable;
LENGTH(SOMETEXT)
----------------
12000
SQL> select testid from mytable
2 order by dbms_lob.substr(sometext, 0, 4000);
TESTID
----------
1
SQL> drop table mytable;
Table dropped.
¿Está utilizando un DISTINCT? –
¿De verdad necesitas un CLOB? Si es así, podría tener una columna separada que tome los primeros 100 caracteres del CLOB, y ordene por eso. EG ORDER BY cast (substr (clob_col, 1,100) como varchar2 (100)) –
CLOB es lo que tenemos en este momento debido al tamaño de los datos. Es posible que tengamos que presentar una vista con una columna adicional para ordenar y actualizar las asignaciones de Hibernate. Solo tenemos que descubrir cómo hacerlo de forma adecuada para todos los DB admitidos. –