代码之家  ›  专栏  ›  技术社区  ›  Petteri H

Oracle CLOB和JPA/Hibernate Order by?

  •  7
  • Petteri H  · 技术社区  · 14 年前

    我有一个jpql查询,它可以很好地与MySQL和SQL Server配合使用。但甲骨文却失败了

    ORA-00932: inconsistent datatypes: expected - got CLOB
    

    原因似乎是Oracle不支持ORDER BY WITH CLOB列。

    1 回复  |  直到 10 年前
        1
  •  4
  •   JoshL    12 年前

    为了进行排序,需要将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.
    
    推荐文章