SQL:将计数与 Clob 一起使用

Bin*_*hou 2 sql oracle clob count

我有一个表 feature_vector_t 有两列 doc_id 和 feature_vector,其中 feature_vector 是一个CLOB包含字符串的。

由于同一个 doc_id 可能有多个 feature_vector 值,我试图使用以下方法进行计数:

select doc_id, count(feature_vector) from feature_vector_t group by doc_id
Run Code Online (Sandbox Code Playgroud)

但是,我收到一个错误说

ORA--00932 不一致的数据类型:预期得到 CLOB 00932。00000-“不一致的数据类型:预期 %s 得到 %s”

另一个查询通过将 Clob 转换为字符串来工作

select doc_id, count(dbms_lob.substr(feature_vector, 1, 5)) from feature_vector_t group by doc_id
Run Code Online (Sandbox Code Playgroud)

有人能解释一下幕后发生了什么吗?为什么不使用原始clob计数?

mus*_*cio 6

看来 Oracle 有一个限制,不允许您将 LOB 传递给COUNT()函数。

但是,出于性能原因,您无论如何都不想计算 LOB。如果feature_vector从不为 NULL,一个简单的

select doc_id, count(*) from feature_vector_t group by doc_id 
Run Code Online (Sandbox Code Playgroud)

应该足够了,否则你可以使用这样的东西:

select 
 doc_id, 
 count(case when feature_vector is null then null else 1 end) 
from feature_vector_t group by doc_id 
Run Code Online (Sandbox Code Playgroud)