我有一张带有Clob列的表。需要执行基于Clob列内容的搜索。然而select * from aTable where aClobColumn = 'value';
失败但
select * from aTable where aClobColumn like 'value';
似乎很好。 oracle如何处理Clob列上的过滤。它仅支持'like'子句,不支持=,!=等。是否与其他数据库(如mysql,postgres等)相同
另外,在像Hibernate这样的实现JPA的框架中如何处理这种情况?
最佳答案
是的,这是不允许的(此限制不会影响PL / SQL中CLOB
的比较)
尝试时在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