在Oracle 9i中,是否有一条命令可以显示表的外键以及这些外键所引用的表?
我进行了搜索,没有找到任何内容,但我发现了一个与MySql相似的等效命令,即SHOW CREATE TABLE
在Oracle的SQL中是否有等效的命令?
感谢您的回复,但是我认为是否有类似MySql的简单方法。
在Oracle 9i中,是否有一条命令可以显示表的外键以及这些外键所引用的表?
我进行了搜索,没有找到任何内容,但我发现了一个与MySql相似的等效命令,即SHOW CREATE TABLE
在Oracle的SQL中是否有等效的命令?
感谢您的回复,但是我认为是否有类似MySql的简单方法。
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
您可以首先列出表的所有约束条件,以及其他表上引用的任何约束条件:
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');
这个可能可以做到你想要的,它使用了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>';
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';