一尘不染

查询Oracle Clob列

hibernate

我有一张带有Clob列的表。需要执行基于Clob列内容的搜索。然而

select * from aTable where aClobColumn = 'value';

失败但

select * from aTable where aClobColumn like 'value';

似乎很好。oracle如何处理Clob列上的过滤。它仅支持’like’子句,不支持=,!=等。是否与其他数据库(如mysql,postgres等)相同

另外,在像Hibernate这样的实现JPA的框架中如何处理这种情况?


阅读 359

收藏
2020-06-20

共1个答案

一尘不染

是的,这是不允许的(此限制不影响CLOBS IN PL /
SQL比较)采用比较运营商如=!=<>等SQL语句,试图比较两个当CLOB列或CLOB列,字符文字,像你一样。为了能够在SQL语句中进行这种比较,可以使用dbms_lob.compare()函数。

  select * 
    from aTable 
   where dbms_lob.compare(aClobColumn, 'value') = 0

在上面的查询中,'value'文字将隐式转换为CLOB数据类型。为了避免隐式转换,'value'可以CLOB
使用TO_CLOB()函数将文字显式转换为数据类型,然后传递给compare()函数:

  select * 
    from aTable 
   where dbms_lob.compare(aClobColumn, to_clob('value')) = 0
2020-06-20