2011-01-27 3 views
5

data_column이라는 열이 있는데 "123123,12,123123"과 같은 값이 있습니다. 두 번째 그룹으로 그룹화 된 행 수를 계산하고 싶습니다. 가지고 : CLOB 를 00932. 00000 - : - "일치하지 않는 데이터 유형 : 예상 % s에 % s을 (를) 받았습니다"incostintent 데이터 유형 : 예상 내가regexp_substr을주는 쿼리로 select 그룹을 만들 수 있습니까?

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

을 실행할 때

는하지만 그것은 ORA-00932

을 제공합니다

정규 표현식 하위 문자열로 그룹화 할 수 있습니까?

답변

2

문제는 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 

그러나 오라클은 (10.2 테스트) 당신이 허용하지 않습니다 의 Clob 컬럼 그룹 :

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 
:

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로 기능 출력을 변환 할 수 있습니다