XMLAGG-ORA-00932: несогласованные типы данных: ожидаемый-получил CLOB на CLOB



У меня есть следующий SQL-запрос:



    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;
751   1  

1 ответ:

Проблема с DISTINCT и ORDER 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;

Если вы должны заказать по нему, вы можете привести CLOB к varchar2 и заказать по нему:

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

Comments

    Ничего не найдено.