我想知道如何列出用户表名称及其主键名称作为第二列?
我已经完成了一半的工作,但我不知道还要做什么。
select table_name from user_tables ORDER BY (table_name) ASC
有谁知道怎么做吗?
谢谢
最佳答案
这个简单的查询为您提供表列表以及 PK 约束名称(但不是列名称):
select ut.table_name, uc.constraint_name
from user_tables ut
left join user_constraints uc
on ut.table_name = uc.table_name
and uc.constraint_type = 'P';
如果您想要列名称,请记住一个 PK 可以有多个列!由于有collect()聚合函数,我们需要首先创建一个实用程序类型:
create type ty_varchar_nt as table of varchar2(4000);
select ut.table_name, uc.constraint_name, cast(collect (uic.column_name) as ty_varchar_nt) as pk_cols
from user_tables ut
left join user_constraints uc
on ut.table_name = uc.table_name
and uc.constraint_type = 'P'
left join user_ind_columns uic
on uc.index_name = uic.index_name
group by ut.table_name, uc.constraint_name;
如果您不喜欢嵌套选项卡的格式,您可以编写一个实用程序函数,该函数将 NT 作为输入并提供连接的逗号分隔字符串作为输出。只是没有时间自己做;)
关于sql - 获取表的主键名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1319957/