9

我有一个适用于 MySQL 和 SQL Server 的 JPQL 查询。但是对于 Oracle,它失败了

ORA-00932: inconsistent datatypes: expected - got CLOB

原因似乎是 Oracle 不支持带有 CLOB 列的 ORDER BY。

有没有 JPQL 可以解决这个问题?

4

1 回答 1

11

您需要将 CLOB 转换为 Varchar 才能进行排序。不幸的是,Varchar 列在 Oracle 中被限制为 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.
于 2012-05-29T17:26:55.730 回答