问题描述
嗨,汤姆,
我需要从架构中获取所有表的ddl。
它应该为每个表生成一个单独的文件。
例如: emp.sql和部门。用于scott schema的emp和部门表的sql。
DDL脚本应该包含NOT NULL和表的其他约束。
我不希望为表的每个约束使用单独的脚本 (带有ALTER语句),但是约束应该在表的DDL脚本本身内生成。
我通过使用 “数据库导出” 功能尝试使用SQL Developer 4.1.1。但是此工具不会在表的DDL中生成not NULL约束。
但是,当我尝试使用SQL开发人员的表定义的 “SQL” 选项卡获取任何表的DDL时,它会显示DDL中的NOT NULL约束
如何在单独的文件中获取模式的所有表的DDL,包括表的同一DDL脚本中的约束。
这是我将源代码与我的版本控制系统进行比较所必需的。版本控制系统中的源存储方式使得DDL在同一文件中也包含NOT NULL约束。
请帮忙。
我需要从架构中获取所有表的ddl。
它应该为每个表生成一个单独的文件。
例如: emp.sql和部门。用于scott schema的emp和部门表的sql。
DDL脚本应该包含NOT NULL和表的其他约束。
我不希望为表的每个约束使用单独的脚本 (带有ALTER语句),但是约束应该在表的DDL脚本本身内生成。
我通过使用 “数据库导出” 功能尝试使用SQL Developer 4.1.1。但是此工具不会在表的DDL中生成not NULL约束。
但是,当我尝试使用SQL开发人员的表定义的 “SQL” 选项卡获取任何表的DDL时,它会显示DDL中的NOT NULL约束
如何在单独的文件中获取模式的所有表的DDL,包括表的同一DDL脚本中的约束。
这是我将源代码与我的版本控制系统进行比较所必需的。版本控制系统中的源存储方式使得DDL在同一文件中也包含NOT NULL约束。
请帮忙。
专家解答
使用Oracle SQL Developer导出表DDL有很多选项。
杰夫·史密斯 (Jeff Smith) 在以下帖子中讨论了它们:
https://www.thatjeffsmith.com/archive/2014/06/how-to-generate-schema-ddl-scripts-with-one-file-per-table-using-sql-developer/
https://www.thatjeffsmith.com/archive/2016/05/configuring-your-generated-ddl-in-sql-developer-and-sqlcl/
https://www.thatjeffsmith.com/archive/2011/11/introducing-the-sql-developer-shopping-cart/
注意: 如果将表加载到Data Modeler中,则可以使用它来进行源代码控制!
如果以上都没有帮助,您可以始终使用dmbs_metadata手动启动DDL。
使用转换设置所需的选项。然后调用get_ddl为您的模式中的每个表:
SQLcl中的DDL命令做类似的事情:
杰夫·史密斯 (Jeff Smith) 在以下帖子中讨论了它们:
https://www.thatjeffsmith.com/archive/2014/06/how-to-generate-schema-ddl-scripts-with-one-file-per-table-using-sql-developer/
https://www.thatjeffsmith.com/archive/2016/05/configuring-your-generated-ddl-in-sql-developer-and-sqlcl/
https://www.thatjeffsmith.com/archive/2011/11/introducing-the-sql-developer-shopping-cart/
注意: 如果将表加载到Data Modeler中,则可以使用它来进行源代码控制!
如果以上都没有帮助,您可以始终使用dmbs_metadata手动启动DDL。
使用转换设置所需的选项。然后调用get_ddl为您的模式中的每个表:
create table t (
c1 int not null primary key,
c2 int not null unique,
c3 int references t ( c1 )
);
begin
dbms_metadata.set_transform_param (dbms_metadata.session_transform,'STORAGE',false);
dbms_metadata.set_transform_param (dbms_metadata.session_transform,'TABLESPACE',false);
dbms_metadata.set_transform_param (dbms_metadata.session_transform,'SEGMENT_ATTRIBUTES', false);
dbms_metadata.set_transform_param (dbms_metadata.session_transform,'CONSTRAINTS', true);
dbms_metadata.set_transform_param (dbms_metadata.session_transform,'REF_CONSTRAINTS', true);
end;
/
set long 10000
select dbms_metadata.get_ddl('TABLE',table_name,user)
from user_tables
where table_name = 'T';
DBMS_METADATA.GET_DDL('TABLE',TABLE_NAME,USER)
CREATE TABLE "CHRIS"."T"
( "C1" NUMBER(*,0) NOT NULL ENABLE,
"C2" NUMBER(*,0) NOT NULL ENABLE,
"C3" NUMBER(*,0),
PRIMARY KEY ("C1")
USING INDEX ENABLE,
UNIQUE ("C2")
USING INDEX ENABLE,
FOREIGN KEY ("C3")
REFERENCES "CHRIS"."T" ("C1") ENABLE
) ; SQLcl中的DDL命令做类似的事情:
SQL> sho ddl
STORAGE : OFF
INHERIT : ON
SQLTERMINATOR : ON
OID : ON
SPECIFICATION : ON
TABLESPACE : OFF
SIZE_BYTE_KEYWORD : ON
PRETTY : ON
REF_CONSTRAINTS : ON
FORCE : ON
PARTITIONING : ON
CONSTRAINTS : ON
INSERT : OFF
BODY : ON
CONSTRAINTS_AS_ALTER : ON
SEGMENT_ATTRIBUTES : OFF
SQL>
SQL> ddl t
CREATE TABLE "CHRIS"."T"
( "C1" NUMBER(*,0) NOT NULL ENABLE,
"C2" NUMBER(*,0) NOT NULL ENABLE,
"C3" NUMBER(*,0),
PRIMARY KEY ("C1")
USING INDEX ENABLE,
UNIQUE ("C2")
USING INDEX ENABLE,
FOREIGN KEY ("C3")
REFERENCES "CHRIS"."T" ("C1") ENABLE
) ; 文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




