Отображение внешнего ключа в Oracle 9i

голоса
3

Есть ли команда в Oracle 9i, который отображает внешние ключи таблицы, а также таблицы, что эти внешние ключи ссылаются?

Я искал, не нашел ничего, но я нашел эквивалентную команду, которая работает с MySql, который SHOW CREATE TABLE

Есть эквивалент команды для этого в SQL оракула?

Я ценю ваш ответ, но я думал, что очень короткий способ сделать это, как MySql.

Задан 10/12/2008 в 02:50
источник пользователем
На других языках...                            


4 ответов

голоса
4

Вот еще один ответ: dbms_metadataпакет имеет функцию , которая может возвращать DDL для определения таблицы.

SELECT dbms_metadata.get_ddl('TABLE', '<table>', '<schema>') FROM dual;

Этот пакет, по-видимому был доступен с Oracle 9.2

http://download-west.oracle.com/docs/cd/B10501_01/appdev.920/a96612/d_metada.htm#1656

Ответил 10/12/2008 в 03:48
источник пользователем

голоса
2

Вы могли бы начать с перечислением всех ограничений для таблицы вместе с любым ссылочным ограничением на других таблицах:

SELECT
     acc.table_name
    ,acc.column_name
    ,acc.constraint_name
    ,ac.r_constraint_name AS referenced_constraint
FROM all_cons_columns acc
INNER JOIN all_constraints ac ON (acc.constraint_name = ac.constraint_name)
WHERE acc.table_name = UPPER('your_table_here');

Если у вас есть разумные соглашения об именах для ваших ограничений должно быть возможным, чтобы определить, какие являются внешние ключи, приставка Ань FK '/ суффикс является типичным.

Ответил 10/12/2008 в 03:36
источник пользователем

голоса
1

Это может делать то, что вы хотите, он использует системные представления Oracle. У меня нет экземпляра Oracle под рукой, чтобы проверить это, однако.

SELECT fk.owner, fk.constraint_name, fk.table_name, fc.column_name,
  pk.owner, pk.constraint_name, pk.table_name, pc.column_name
FROM all_constraints fk
 JOIN all_cons_columns fc ON (fk.owner = fc.owner AND fk.constraint_name = fc.constraint_name)
 JOIN (all_constraints pk
   JOIN all_cons_columns pc ON (pk.owner = pc.owner AND pk.constraint_name = pc.constraint_name)) 
 ON (fk.r_owner = pk.owner AND fk.r_constraint_name = pk.constraint_name
   AND fc.position = pc.position)
WHERE fk.constraint_type = 'R' AND pk.constraint_type IN ('P', 'U')
  AND fk.owner = '<schema>' AND fk.table_name = '<table>';
Ответил 10/12/2008 в 03:34
источник пользователем

голоса
0

Если вам нужен DDL для внешних ключей в будущем, то здесь ответ заранее :)

select 
  DBMS_METADATA.GET_DEPENDENT_DDL('REF_CONSTRAINT' ,atb.table_name, atb.owner) 
from 
  all_tables atb, all_constraints ac
where 
  atb.owner = ac.owner and
  ac.constraint_type = 'R' and
  ac.table_name = atb.table_name and
  atb.owner = 'YOURSCHEMA';
Ответил 08/01/2010 в 23:05
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more