首页 > 解决方案 > Oracle中的LISTAGG查询分批拆分

问题描述

我想在 Oracle 数据库(19.3)中按模式获取表组列表并分批拆分表列表。

示例:我有 10 个属于 HR 模式的表(A、B、C、D、E、F、G、H、I、J)。通过我的查询,我得到了这个输出 Select Schema, LISTAGG(Table_Name) FROM SchemaInfo GROUP BY Schema

架构
人力资源 A,B,C,D,E,F,G,H,I,J

我想将组拆分为 5 个元素的批次并获得如下输出:

架构
人力资源 A,B,C,D,E
人力资源 F,G,H,I,J

有没有办法得到这个输出?我对 SQL 有类似的东西,但在 Oracle 中没有采用相同的方法。

标签: sqloraclebatch-processinglistagg

解决方案


可能有一种更简单的方法,但这是我做的一个例子all_tables

select owner, listagg(table_name, ',') 
from (
    select owner, table_name, floor(row_number() over (partition by owner order by table_name)/5) as batch
    from all_tables)
group by owner, batch
order by owner, batch

使用您的表,它看起来像:

select Schema, listagg(table_name, ',') as Tables
from (
    select Schema, table_name, floor(row_number() over (partition by Schema order by table_name)/5) as batch
    from SchemaInfo)
group by Schema, batch
order by Schema, batch

推荐阅读