有没有办法以编程方式将oracle表定义从一个数据库“移动”到另一个数据库?

时间:2009-07-28 18:10:37

标签: oracle integration-testing introspection

假设我有两个Oracle数据库。我们称它们为数据库A和数据库B.

现在假设我在数据库A中有一个表,其定义如下:

CREATE TABLE foo
(
    foo_id INT PRIMARY KEY,
    some_text VARCHAR2(10),
    other_table_id INT

    CONSTRAINT some_fk_constraint
        FOREIGN KEY (other_table_id)
        REFERENCES other_table(other_table_id)
)

...有没有简单的方法在数据库B中使用相同的主键和相同的外键创建同一个表,但没有任何数据?如果有一个纯SQL方法是理想的,所以我可以使用cx_Oracle在Python中执行此操作,但如果需要,我可以启动一个shell脚本。

2 个答案:

答案 0 :(得分:1)

DBMS_METADATA听起来像你正在寻找的包

select dbms_metadata.get_ddl('TABLE','DEPT','SCOTT') from dual;

然后你可以用EXECUTE IMMEDIATE运行它

答案 1 :(得分:1)

select dbms_metadata.get_ddl('TABLE','FOO','SCHEMA_NAME') from dual; 

这将返回创建/重新创建表所需的DDL。有一点需要注意,这将返回源数据库中使用的表空间(在您的情况A中),因此您需要确保它们存在于db B中,并且您已连接的用户具有适当的配额。