2011-01-27 5 views
5

मेरे पास डेटा_column नामक एक कॉलम है, इसमें कुछ मूल्य "123123,12,123123" है। मैं दूसरे द्वारा समूहित पंक्तियों की गिनती करना चाहता हूं।क्या मैं regexp_substr देकर क्वेरी द्वारा एक चुनिंदा समूह बना सकता हूं?

लेकिन जब मैं

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

चलाने यह

देता ORA-00932: incostintent डेटाटाइप्स: उम्मीद: - मिल गया: CLOB 00932. 00000 - "असंगत डेटाटाइप्स: उम्मीद% s% s मिल गया"

क्या मैं एक रेगेक्स सबस्ट्रिंग द्वारा समूहित कर सकता हूं?

उत्तर

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 count(*) from t group by data_column; 

select count(*) from t group by data_column 

ORA-00932: inconsistent datatypes: expected - got CLOB 

आप एक VARCHAR2 को समारोह उत्पादन में बदल सकते हैं द्वारा समूह के प्रदर्शन करने के लिए:

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 
संबंधित मुद्दे