我有一个模式中的110个表的列表,并希望获得所有主键的列表。这些表将有多个主键。 我希望每个表的结果是一行,所以输出应该是110行。
我用来获取主键的查询是
`SELECT cols.table_name, cols.column_name
FROM all_constraints cons, all_cons_columns cols
WHERE cols.table_name in ('C_ACTIVITY','C_HLD')
AND cons.constraint_type = 'P'
AND cons.constraint_name = cols.constraint_name
AND cons.owner = cols.owner`
以上查询的输出为
`C_ACTIVITY PK1
C_ACTIVITY PK2
C_HLD P1
C_HLD P2
C_HLD P3`
但我希望输出
`C_ACTIVITY PK1,PK2
C_HLD P1,P2,P3`
我尝试使用Pivot但无法获得所需的输出
答案 0 :(得分:0)
按表名分组并使用LISTAGG构建字符串:
SELECT
cols.table_name,
LISTAGG(cols.column_name, ',') WITHIN GROUP (order by cols.position) as columns
FROM all_constraints cons
JOIN all_cons_columns cols
ON cons.owner = cols.owner AND cons.constraint_name = cols.constraint_name
WHERE cols.table_name in ('C_ACTIVITY','C_HLD')
AND cons.constraint_type = 'P'
GROUP BY cols.table_name;