获取每个表的一行中所有主键的列表

时间:2014-10-29 21:25:25

标签: oracle11g primary-key

我有一个模式中的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但无法获得所需的输出

1 个答案:

答案 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;