2011-01-27 10 views
5

Mam kolumnę o nazwie data_column, ma ona wartość "123123,12,123123". Chcę policzyć wiersze pogrupowane według drugiego.Czy mogę utworzyć grupę zaznaczoną przez zapytanie, podając regexp_substr?

Ale gdy uruchamiam

select count(*) from table group by regexp_substr(data_column,'[^,]+',1,2); 

Daje

ORA-00932: datatypes incostintent: Oczekuje: - otrzymała: CLOB 00932. 00000 - "niezgodne typy danych: oczekiwano% s got% s"

Czy mogę grupować według podłańcucha regex?

Odpowiedz

2

problem nie pochodzą z funkcji regexp_substr ale od typu danych kolumny:

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 

Tutaj widać, że funkcja zachowuje się poprawnie, jednak Oracle (testowane z 10,2) nie pozwalają na grupa z kolumny 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 

można konwertować wyjście funkcji w VARCHAR2 wykonać 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 
Powiązane problemy