Могу ли я сделать группу выбора по запросу, дающему regexp_substr?
У меня есть столбец с именем data_column, он имеет некоторое значение, например "123123,12,123123". Я хочу посчитать строки, сгруппированные по второй.
Но когда я бегу
select count(*) from table group by regexp_substr(data_column,'[^,]+',1,2);
Это дает
ORA-00932: несовместимые типы данных: ожидается: - получено: CLOB 00932. 00000 - "несовместимые типы данных: ожидается%s получено%s"
Не могу ли я сгруппировать по подстроке регулярного выражения?
1 ответ
Решение
Проблема не исходит от regexp_substr
функция, но из вашего типа данных столбца:
SQL> CREATE TABLE t (data_column CLOB);
Table created
SQL> INSERT INTO t VALUES ('123123,12,123123');
1 row inserted
SQL> INSERT INTO t VALUES ('123124,12,123123');
1 row inserted
SQL> INSERT INTO t VALUES ('123125,11,123123');
1 row inserted
SQL> SELECT regexp_substr(data_column,'[^,]+',1,2) FROM t;
REGEXP_SUBSTR(DATA_COLUMN,'[^,
--------------------------------------------------------------------------------
12
12
11
Здесь вы видите, что функция ведет себя корректно, однако Oracle (протестированный с 10.2) не позволяет вам группировать по столбцу clob:
SQL> select count(*) from t group by data_column;
select count(*) from t group by data_column
ORA-00932: inconsistent datatypes: expected - got CLOB
Вы можете преобразовать вывод функции в VARCHAR2 для выполнения GROUP BY:
SQL> SELECT dbms_lob.substr(regexp_substr(data_column,'[^,]+',1,2), 4000),
2 COUNT(*)
3 FROM t
4 GROUP BY dbms_lob.substr(regexp_substr(data_column,'[^,]+',1,2), 4000);
DBMS_LOB.SUBSTR(REGEXP_SUBSTR( COUNT(*)
------------------------------- ----------
12 2
11 1