Oracle 10g递归计数xml clob

时间:2012-03-30 19:24:59

标签: sql xml oracle count clob

我正在运行Oracle 10gR2数据库,我们导入xml信息并将其存储在CLOB中。我试图计算一个短语'nIIN'出现在CLOB中并除以2的次数。

select count(REGEXP_SUBSTR(rec_data, '[=nIIN=]', 'i'))
from gcssmc_imports_data
where interface_name = 'MATS'
and created_date like to_char(sysdate,'DD-MON-YY');

上面是我放在一起的查询,但我遗漏了一些东西。

这是错误:

Error starting at line 1 in command:
select count(REGEXP_SUBSTR(rec_data, '[=nIIN=]', 'i')) from gcssmc_imports_data where interface_name = 'MATS' and created_date like to_char(sysdate,'DD-MON-YY')
Error at Command Line:1 Column:13
Error report:
SQL Error: ORA-00932: inconsistent datatypes: expected - got CLOB
00932. 00000 -  "inconsistent datatypes: expected %s got %s"
*Cause:    
*Action:

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

错误消息为您提供所需的线索:

Error at Command Line:1 Column:13

这是指查询的这一部分:

1234567890123
select count(REGEXP_SUBSTR(rec_data,

count期待数字,字符串或其他简单数据类型。但是,这里的REGEXP_SUBSTR返回一个CLOB,因为它是它的第一个参数(rec_data)。

我建议您更改查询以使用REGEXP_INSTR - 如果未找到子字符串则返回0,例如:

select count(case when REGEXP_INSTR(rec_data, '[=nIIN=]', 'i') = 0
                  then null
                  else 1
             end) ...