Я использую этот запрос для сравнения столбцов, на которые ссылаются внешние ключи, потому что наши администраторы баз данных требуют, чтобы они были того же типа и той же точности. Может быть, это может вам помочь.
Вы можете использовать префиксы DBA, ALL или USER в зависимости от прав доступа:
SELECT uc.constraint_name,ucc1.TABLE_NAME,ucc1.column_name,a.data_type||'('||nvl(a.data_precision,a.data_length)||')' length,
ucc2.TABLE_NAME references_table,ucc2.column_name references_column, b.data_type||'('||nvl(b.data_precision,b.data_length)||')' length
FROM user_constraints uc
, user_cons_columns ucc1
, user_cons_columns ucc2
, user_tab_columns a
, user_tab_columns b
WHERE uc.constraint_name = ucc1.constraint_name
and a.column_name=ucc1.column_name
and b.column_name=ucc1.column_name
and uc.table_name=a.table_name
and uc.table_name=b.table_name
AND uc.r_constraint_name = ucc2.constraint_name
AND ucc1.POSITION = ucc2.POSITION
AND uc.constraint_type = 'R'
ORDER BY ucc1.TABLE_NAME
, uc.constraint_name;
[ALL_CONSTRAINTS] (http://docs.oracle.com/cd/E11882_01/server.112/e25513/statviews_1046. htm # i1576022) [ALL_CONS_COLUMNS] (http://docs.oracle.com/cd/E11882_01/server.112/e25513/statviews_1044.htm#i1575870) –
Есть способы запросить словарь данных, чтобы найти определенные ограничения FK, так как другие будут предлагать. Однако следует отметить, что некоторые приложения могут не определять ограничения FK и вместо этого полагаться на приложение для обеспечения целостности базы данных. Например, собственный E-Business Suite от Oracle не использует ограничения FK в базе данных среди тысяч таблиц. – Wolf
@JohnDoyle, я не думаю, что это дублированный вопрос. Этот вопрос требует более узкого круга ключей, основанных на таблице и столбце. Указанный вопрос показывает, как получить все отношения FK в схеме. Похоже, но не совсем то же самое. –