我有一个表
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]ORE-02065:ALTER SYSTEM的非法选项。
代码方面有什么问题吗?如果没有,这个的解决方法是什么
如果LISTAGG
不起作用(很明显,结果字符串超过4000个字符(,请切换到不受此限制的优雅XMLAGG
。结果应该是相同的(比较这两个(:
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>