Oracle 10g рекурсивный счетчик xml clob - PullRequest
1 голос
/ 30 марта 2012

Я работаю с БД 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 голосов
/ 31 марта 2012

Сообщение об ошибке дает вам подсказку:

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) ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...