6
我有一個JPQL查詢,可以很好地與MySQL和SQL Server一起使用。但是對於Oracle來說,它會失敗Oracle CLOB和JPA/Hibernate ORDER BY?
ORA-00932: inconsistent datatypes: expected - got CLOB
原因似乎是Oracle不支持使用CLOB列的ORDER BY。
有沒有JPQL解決這個問題?
我有一個JPQL查詢,可以很好地與MySQL和SQL Server一起使用。但是對於Oracle來說,它會失敗Oracle CLOB和JPA/Hibernate ORDER BY?
ORA-00932: inconsistent datatypes: expected - got CLOB
原因似乎是Oracle不支持使用CLOB列的ORDER BY。
有沒有JPQL解決這個問題?
您需要將CLOB轉換爲Varchar才能進行排序。不幸的是,Oracle中的Varchar列限制爲4000個字符。如果按前4000個字符排序是合理的,則使用DBMS_LOB.SUBSTR的SQLPlus示例如下:
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.
您是否正在使用DISTINCT? – 2010-09-13 15:22:11
你確實需要一個CLOB嗎?如果是這樣,你可以有一個單獨的列,它取得CLOB的前100個字符,然後按順序排列。 EG ORDER BY cast(substr(clob_col,1,100)as varchar2(100)) – 2010-09-13 23:22:03
由於數據大小,CLOB是我們目前擁有的。我們可能必須引入一個額外的列來查看和更新Hibernate映射。只需要弄清楚如何爲所有支持的數據庫很好地完成它。 – 2010-09-14 08:24:29