2011-01-27 14 views
5

Tengo una columna llamada data_column, tiene algún valor como "123123,12,123123". Quiero contar filas agrupadas por el segundo.¿Puedo hacer un grupo selecto por consulta dando un regexp_substr?

Pero cuando corro

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

Da

ORA-00932: tipos de datos incostintent: espera: - tiene: CLOB 00932. 00000 - "tipos de datos inconsistentes: se esperaba% s tiene% s"

¿Puedo agrupar por una subcadena regex?

Respuesta

2

el problema no viene de la función regexp_substr pero desde su columna de tipo de datos:

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 

Aquí vemos que la función se comporta correctamente, sin embargo Oracle (probado con 10.2) no le permiten grupo con una columna 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 

puede convertir la salida de la función a un VARCHAR2 para realizar el 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 
Cuestiones relacionadas