oracle 9i中是否有一个命令显示表的外键以及那些外键引用的表?
我正在搜索,没找到任何东西,但我找到了一个与MySql一起工作的等效命令,即SHOW CREATE TABLE
在oracle的SQL中是否有相应的命令?
我感谢您的回复,但我认为像MySql这样做的方法非常简短。
答案 0 :(得分: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
答案 1 :(得分: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'前缀/后缀是典型的。
答案 2 :(得分: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>';
答案 3 :(得分: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';