XMLAGG - ORA-00932:数据类型不一致:预期 - 在 CLOB 上获得 CLOB
XMLAGG - ORA-00932: inconsistent datatypes: expected - got CLOB on 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: inconsistent datatypes: expected - got 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;
问题出在 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
我有以下 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: inconsistent datatypes: expected - got 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;
问题出在 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