SQL-запрос для выбора всех ПК / ФК в базе данных - PullRequest
0 голосов
/ 26 июня 2018

Я попытался найти запрос, который выдает все pk и fk большой базы данных. Поскольку я не смог найти ни одного хорошего запроса, я нашел решение.

SELECT 
    cols.table_name, cols.column_name, cols.position, cons.status, cons.owner
FROM 
    all_constraints cons, all_cons_columns cols
WHERE 
    cols.owner = 'DATABASE_NAME'
    AND cons.constraint_type = 'P'
    AND cons.constraint_name = cols.constraint_name
    AND cons.owner = cols.owner
ORDER BY 
    cols.table_name, cols.position;

Единственное, что нужно изменить, это DATABASE_NAME в конкретное имя базы данных!

У меня вопрос: есть ли "более простой" способ получить все первичные ключи из одной большой базы данных?

1 Ответ

0 голосов
/ 26 июня 2018

Другая версия запроса может использоваться для получения отношения внешнего ключа с таблицей следующим образом:

SELECT constr.table_name,
    column_name,
    position,
    constr.constraint_name,
    DECODE (constraint_type, 'P', 'Primary Key', 'Foreign Key') key_type,
       (SELECT constr2.table_name
        FROM all_constraints constr2
        WHERE constr2.CONSTRAINT_NAME = constr.R_CONSTRAINT_NAME) fK_to_table
    FROM all_cons_columns conscol, all_constraints constr
   WHERE     conscol.constraint_name = constr.constraint_name
         AND conscol.table_name = constr.table_name
         AND CONSTRAINT_TYPE IN ('P', 'R')
         --AND constr.table_name = 'MYTEBLE' (your table here)
ORDER BY table_name, constraint_type, position;

вывод будет в формате ниже

TABLE_NAME  COLUMN_NAME     POSITION   CONSTRAINT_NAME  KEY_TYPE     FK_TO_TABLE
ACCOUNT     ACCOUNT_ID          1        ACCOUNT_PK     Primary Key     
ACCOUNT     ACCOUNT_TYPE_ID     1        ACCOUNT_FK3    Foreign Key  ACCOUNT_TYPE
...