Avrete bisogno di convertire il CLOB in un Varchar per fare l'ordinamento. Purtroppo le colonne Varchar sono limitate a 4000 caratteri in Oracle. Se l'ordinamento per i primi 4000 caratteri è ragionevole, ecco un esempio SQLPlus utilizzando 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.
Si sta utilizzando un distinti? –
Hai davvero bisogno di un CLOB? In tal caso, potresti avere una colonna separata che prende i primi 100 caratteri del CLOB e ordina per quello. EG ORDER BY cast (substr (clob_col, 1.100) come varchar2 (100)) –
CLOB è ciò che abbiamo al momento a causa della dimensione dei dati. Potremmo dover introdurre una vista con una colonna aggiuntiva per l'ordinamento e l'aggiornamento dei mapping di Hibernate. Basta capire come farlo in modo appropriato per tutti i DB supportati. –