【问题标题】:XMLAGG - ORA-00932: inconsistent datatypes: expected - got CLOB on CLOBXMLAGG - ORA-00932:不一致的数据类型:预期 - 在 CLOB 上获得 CLOB
【发布时间】:2017-07-16 23:21:36
【问题描述】:

我有以下 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;

【问题讨论】:

  • 请贴出样表DDL和数据。
  • @GurV 我已经包含了 DDL 和示例数据。谢谢

标签: oracle oracle11g clob


【解决方案1】:

问题在于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;

如果您必须按它订购,您可以将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

【讨论】:

  • @user75ponic - 更新了我的答案。
  • 感谢,非常感谢您的洞察力和帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多