Oracle 中的 LISTAGG 查询分批拆分
LISTAGG query in Oracle split in batches
我想在 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 中没有使用相同的方法。
可能有更简单的方法,但这是我用 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
用你的table,它看起来像:
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
我想在 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 中没有使用相同的方法。
可能有更简单的方法,但这是我用 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
用你的table,它看起来像:
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