【发布时间】:2011-10-05 16:25:39
【问题描述】:
目前Oracle 11.1数据库中大约有30张表。
有没有办法用一个命令生成所有 ddl? (或者几个命令?)
编辑: 根据以下建议,我尝试了:
SELECT dbms_metadata.get_ddl( 'TABLE', table_name, owner )
FROM all_tables;
得到:
ORA-31603: object "HS_PARTITION_COL_NAME" of type TABLE not found in schema "SYS"
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 105
ORA-06512: at "SYS.DBMS_METADATA", line 3241
ORA-06512: at "SYS.DBMS_METADATA", line 4812
ORA-06512: at line 1
31603. 00000 - "object \"%s\" of type %s not found in schema \"%s\""
*Cause: The specified object was not found in the database.
*Action: Correct the object specification and try the call again.
很明显,dbms_metadata 有一些非常基本的东西我不明白。
【问题讨论】:
-
我很抱歉这个问题和其他问题的相似之处,我不明白其他问题的答案。 (或者这个,但是。)
-
在您的编辑中,您需要一个 WHERE 条件,将查询限制为仅为您想要 DDL 的 30 个表生成 DDL。尝试为
SYS拥有的表生成 DDL 是没有意义的。 -
我想我需要关于 where 子句的线索。
-
如果您知道表所在的架构,请使用“where owner in ('SCHEMA1', 'SCHEMA2', 'SCHEMA3')”之类的内容,将 SCHEMA1 等替换为实际的架构名称.