Получить имя первичного ключа таблицы - PullRequest
2 голосов
/ 24 августа 2009

Мне было интересно, как я могу перечислить имя пользовательских таблиц с именем первичного ключа в качестве второго столбца?

Я делаю половину работы, но я не знаю, что еще делать.

select table_name from user_tables ORDER BY (table_name) ASC

Кто-нибудь знает как?

Спасибо

Ответы [ 3 ]

3 голосов
/ 24 августа 2009

Этот простой запрос дает список таблиц вместе с именем ограничения 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 в качестве входных данных и предоставлять объединенную строку с разделителями-запятыми в качестве выходных данных. Просто нет времени сделать это самому;)

1 голос
/ 02 декабря 2011

вы можете использовать следующий запрос

SELECT cols.table_name, cols.column_name, cols.position, cons.status, cons.owner
FROM all_constraints cons, all_cons_columns cols
WHERE cons.constraint_type = 'P'
AND cons.constraint_name = cols.constraint_name
AND cons.owner = cols.owner
ORDER BY cols.table_name, cols.position;
1 голос
/ 24 августа 2009

Попробуйте присоединиться к USER_TABLES с USER_CONSTRAINTS .

В USER_CONSTRAINTS фильтровать все строки с тип_ограничения , равным 'P' (первичный ключ). Там вы получите значения index_name и index_owner , которые можно объединить с USER_INDEXES , и получите имена столбцов из своего ПЕРВИЧНОГО КЛЮЧА.

Хотелось бы, чтобы я знал более простой способ сделать это ... Но я не знаю.

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...