【发布时间】:2021-03-20 16:12:16
【问题描述】:
我想将每周包含多个值的表格更改为每周将所有值放在一行中。但是当我使用 listagg() 时,我的空间不足。我无法更改最大字符串大小(ALTER SYSTEM SET max_string_size=extended SCOPE= SPFILE),并且我不想截断生成的字符串。但是我可以继续下一行,但我不知道该怎么做。例如,如果我的输入是:
Week SKU
202001 598441
202001 846541
202001 77557
202001 57813
202001 5741651
202001 21684135
202001 5451516
202001 545129
202001 98754123
202001 5644242
202002 68454155
...
假设输入文件足够长,它会触发错误:
01489. 00000 - "result of string concatenation is too long"
*Cause: String concatenation result is more than the maximum size.
*Action: Make sure that the result is less than the maximum size.
那我想要一段类似这样的代码:
select
weeknr,
''''||listagg(sku, ''',''', ON OVERFLOW NEXT LINE) within group(order by weeknr)||'''' sku_numbers
from
input_table
group by
weeknr
这样我的输出将如下所示:
Week SKU
202001 '598441','846541','77557','57813','5741651','21684135'
202001 '5451516','545129','98754123','5644242'
202002 '68454155',...
...
这可能吗?非常感谢任何帮助!
【问题讨论】:
-
this 对您的案件有帮助吗?
-
感谢您的建议,但我尝试了 XML,但由于引号,它对我不起作用。
-
不客气,我已经用 XMLELEMENT 修复了那里的部分,谢谢。希望你也尝试过。