我有一张有粗栏的桌子.需要执行基于LOB列内容的搜索.然而,

select * from aTable where aClobColumn = 'value';

失败了,但是

select * from aTable where aClobColumn like 'value';

似乎很管用.Oracle如何处理对LOB列的筛选.它是否只支持‘LIKE’子句,而不支持=,!=等,是否适用于MySQL,Postgres等其他数据库

另外,如何在实现JPA的框架(如Hibernate)中处理此场景?

推荐答案

是,不允许(此限制不影响PL/SQL中的CLOBs比较) 要在SQL语句中使用比较运算符(如=!=<>等),请在try 将两个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

Database相关问答推荐

为Postgres数据库字段创建复合索引

Oracle批量数据处理

将数据集上传到 Hub 时停止运行时会导致什么?

MySQL FIND_IN_SET 的对面

如何在 Angular 中使用 IndexedDB?

为什么 COUNT() 只显示一行表格?

Android Room持久性库@Update不起作用

TSQL - 表值函数中的 If..Else 语句 - 无法通过

matlab 数据文件到 pandas DataFrame

ORM vs 传统数据库查询,它们的字段是什么?

如何更改 SQLite 数据库列中的值?

在 MySQL 中查看表以进行更改?

在 MS SQL 中使用 GUID 作为主键是不是一个坏主意?

数据库表中的索引有什么缺点?

SOA 和共享数据库

为 Java servlet 管理数据库连接的最佳方法

处理多个表的最佳实践

数据库触发器的命名约定

MySQL 从一个数据库插入另一个数据库

Hibernate hbm2ddl.auto 默认值