我在脚本中使用listagg
listagg(' |' || aktiv.AKTIVITÄT_NR || ' |' || aktiv.AKTIVITÄT_KÜRZEL || ' |' || aktiv.AKTIVITÄT_BESCHREIBUNG || ' |' || aktiv.AKTIVITÄT_ERWARTETES_ERGEBNIS|| ' |' || CHR(10)) within group (order by aktiv.AKTIVITÄT_NR)) as activity
当listagg超过4000字节时,所有脚本都会失败。如何处理异常并为此记录插入e.x。 NULL并毫无疑问地转到下一条记录。
最佳答案
抱歉,我使用自己的示例来说明这一点,因为我只是没有德国布局,也没有表格:
with src as (/* overflow */
select 1 id, level lv
from dual
connect by level <= 10000
union all
/* fitting */
select 2, level lv
from dual
connect by level <= 10
union all
select 3, level lv
from dual
connect by level <= 5)
select listagg(case when length_ <= 4000 then lv end,',') within group (order by lv)
from (select id,lv,sum(length(lv) + 1) over (partition by id) - 1 length_ from src)
group by id
这个想法:
src是您的表格,id是您要分组的值,level是您的值
此子查询
select id,lv,sum(length(lv) + 1) over (partition by id) - 1 length_ from src
收集将来结果listagg
的长度,为分隔符+ 1
创建了','
,为未使用的最后一个分隔符创建了- 1
表达式
listagg(case when length_ <= 4000 then lv end,',') within group (order by lv)
检查长度是否小于允许值(4000),如果溢出则返回null我希望这能解决您的问题。
关于sql - 如何处理listagg()函数中的异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20704081/