Этот простой запрос дает вам список таблиц вместе с 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';
Если вы хотите, чтобы имя столбца, помните о том, что ПК может иметь несколько колонок! Нам нужно создать тип утилиты первым из сборной() агрегатной функции:
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 и предоставлять конкатенированную строку с разделителями-запятыми в качестве вывода. Просто не хватает времени, чтобы сделать это сам;)
что вы имеете в виду с «именем таблицы пользователя»? – rogeriopvl
Имена таблиц, созданных определенным пользователем (я работаю с oracle, поэтому он создает что-то вроде схемы на пользователя). – Sheldon