2017-02-26 110 views
2

我有以下SQL查詢:XMLAGG - ORA-00932:不一致的數據類型:預期 - 有CLOB上CLOB

SELECT DISTINCT 
     prod_no, 
     prod_text, 
     RTRIM (
      XMLAGG (XMLELEMENT (e, prod_desc, ',').EXTRACT (
         '//text()') ORDER BY prod_desc).getclobval(), 
      ',') 
    FROM mytable 
    WHERE prod_no = 'XCY' 
GROUP BY prod_no, 
     prod_text 

當我執行我得到

ORA-00932:不一致的數據類型:預期 - 有CLOB

更新1

DDL和樣本數據

CREATE TABLE mytable 
(
    prod_no  VARCHAR2 (30 BYTE) NOT NULL, 
    prod_text VARCHAR2 (30 BYTE) NOT NULL, 
    prod_desc CLOB 
); 

SET DEFINE OFF; 

INSERT INTO mytable (prod_no, prod_text, prod_desc) 
    VALUES ('XCY', 'DECKS', 'THIS IS TEST'); 

INSERT INTO mytable (prod_no, prod_text, prod_desc) 
    VALUES ('ABC', 'DECKS', 'THIS IS TEST 2'); 

COMMIT; 
+0

請郵寄樣品表DDL和數據。 – GurV

+0

@GurV我已經包含了DDL和示例數據。謝謝 – user75ponic

回答

4

問題是與DISTINCTORDER BY。 Oracle不允許在CLOB上執行這些操作。您正在使用group by,因此無論如何您都不需要DISTINCT

如果您不介意說明的順序,下面的內容將起作用。

SELECT 
     prod_no, 
     prod_text, 
     RTRIM (
      XMLAGG (XMLELEMENT (e, prod_desc, ',')).EXTRACT (
         '//text()').getclobval(), 
      ',') 
    FROM mytable 
    WHERE prod_no = 'XCY' 
GROUP BY prod_no, 
     prod_text; 

如果您必須通過它訂購,您可以通過它投的CLOBvarchar2與秩序:

SELECT 
     prod_no, 
     prod_text, 
     RTRIM (
      XMLAGG (XMLELEMENT (e, prod_desc, ',') 
       ORDER BY cast(prod_desc as varchar2(4000))).EXTRACT (
         '//text()').getclobval(), 
      ',') 
    FROM mytable 
    WHERE prod_no = 'XCY' 
GROUP BY prod_no, 
     prod_text 
+0

@ user75ponic - 更新了我的答案。 – GurV

+0

非常感謝您的洞察力和幫助。 – user75ponic

相關問題