Просмотр метаданных оракула об ограничениях первичного / внешнего ключа - PullRequest
3 голосов
/ 09 июля 2010

Какая таблица содержит подробную информацию (например, таблицу, на которую ссылается внешний ключ) об ограничениях? Таблицы 'all_cons_columns', 'all_constraints' содержат только название ограничений, что не очень полезно. В настоящее время я использую dbms_metadata.get_ddl (), но он не работает на всех базах данных.

Спасибо.

Ответы [ 4 ]

5 голосов
/ 09 июля 2010

Все это есть: столбец R_CONSTRAINT_NAME в ALL_CONSTRAINTS содержит имя ограничения PK / UK, на которое ссылаются, для внешнего ключа. Затем вы можете найти это ограничение, чтобы получить TABLE_NAME справочной таблицы.

Если посмотреть на ALL_CONS_COLUMNS, POSITION столбца во внешнем ключе будет соответствовать POSITION столбца в первичном / уникальном ключе.

3 голосов
/ 04 февраля 2011

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

SELECT 
   'ALTER TABLE ' || a.table_name || ' ADD CONSTRAINT ' || a.constraint_name 
   || ' FOREIGN KEY (' || a.column_name || ') REFERENCES ' || jcol.table_name 
   || ' (' || jcol.column_name || ');' as commandforeign
FROM
   (SELECT 
       uc.table_name, uc.constraint_name, uc.r_constraint_name, col.column_name
    FROM 
       USER_CONSTRAINTS uc, USER_CONS_COLUMNS col
    WHERE 
       uc.constraint_type='R' and uc.constraint_name=col.constraint_name) a
 INNER JOIN 
    USER_CONS_COLUMNS jcol
 ON 
    a.r_constraint_name=jcol.constraint_name;
3 голосов
/ 09 июля 2010

В этом операторе перечислены таблицы, имена ограничений и имена таблиц внешнего ключа:

select c.table_name,c.constraint_name,  --c.r_constraint_name, 
  cc.table_name
from all_constraints c
inner join all_constraints cc on c.r_constraint_name = cc.constraint_name
0 голосов
/ 09 июля 2010

Взгляните на: Обратный инжиниринг модели данных .Основываясь на этом, я создал программу Python, которая выводит схему Oracle db в текст Есть PRIMARY_KEYS_INFO_SQL и FOREIGN_KEYS_INFO_SQL, которые делают то, что вас интересует.

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