9

MySQL と SQL Server で正常に動作する JPQL クエリがあります。しかし、Oracleでは失敗します

ORA-00932: inconsistent datatypes: expected - got CLOB

その理由は、Oracle が CLOB 列での ORDER BY をサポートしていないためと思われます。

これに対するJPQLの回避策はありますか?

4

1 に答える 1

11

ソートを行うには、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.
于 2012-05-29T17:26:55.730 に答える