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计数?
看来 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)