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