0

我有一张桌子temp,我试图查询如下:

    SELECT
    LISTAGG( 'MAX(CASE WHEN CATEGORY = '''||CATEGORY||''' THEN "'||"LEVEL"||'" END) AS "'||
    "LEVEL"||'_'||CATEGORY||'"' , ',' ) WITHIN GROUP ( ORDER BY CATEGORY, "LEVEL" DESC
    ) AS col2
        FROM
    (
        SELECT DISTINCT
            "LEVEL",
            CATEGORY
        FROM
            TEMP );

`

我收到错误 [代码:1489,SQL 状态:72000] ORA-01489:字符串连接的结果太长我无法摆脱这个错误。 我正在使用 DBVisualizer 的 SQL Commander。 我之前也尝试过声明变量,但它似乎不起作用:

@ECHO ${col2 ||32767||varchar2}$

我试过 ALTER SYSTEM SET MAX_STRING_SIZE = EXTENDED;哪个也给出错误:[代码:2065,SQL 状态:42000] ORA-02065:ALTER SYSTEM 的非法选项。

如果不是解决方法,代码前面有什么问题吗

4

1 回答 1

0

如果LISTAGG不起作用(显然,生成的字符串超过 4000 个字符),请切换到没有XMLAGG该限制的 not-that-elegant。结果应该是相同的(比较这两个):

SQL> select listagg(dname, ',') within group (order by dname) result
  2  from dept;

RESULT
--------------------------------------------------------------------------------
ACCOUNTING,OPERATIONS,RESEARCH,SALES


SQL> select rtrim(xmlagg(xmlelement(e, dname ||',') order by dname).extract
  2           ('//text()'), ',') result
  3  from dept;

RESULT
--------------------------------------------------------------------------------
ACCOUNTING,OPERATIONS,RESEARCH,SALES

SQL>
于 2020-10-03T10:50:34.133 回答