问题描述
团队,
我正在使用SQL开发人员17.3和SQLCL 17.3进行此演示。
当从SQLCL做DDL时,我们得到了这个
同时从SQL开发人员导出DDL得到了这个。(在SQL Developer中检查了以下选项-漂亮的打印,终止符,存储,显示架构,向视图添加力,添加字节关键字)
问题:
1) 约束EMP_FK在SQL开发人员中缺失,但在SQLCL中可用
2) 如何仅获取DDL命令中的FK约束-尝试了以下命令,但这无济于事。
我正在使用SQL开发人员17.3和SQLCL 17.3进行此演示。
当从SQLCL做DDL时,我们得到了这个
demo@ORA11G> show ddl
STORAGE : ON
INHERIT : ON
SQLTERMINATOR : ON
OID : ON
SPECIFICATION : ON
TABLESPACE : ON
SIZE_BYTE_KEYWORD : ON
PRETTY : ON
REF_CONSTRAINTS : ON
FORCE : ON
PARTITIONING : ON
CONSTRAINTS : ON
INSERT : ON
BODY : ON
CONSTRAINTS_AS_ALTER : ON
SEGMENT_ATTRIBUTES : ON
demo@ORA11G>
demo@ORA11G> ddl EMP table
CREATE TABLE "DEMO"."EMP"
( "EMPNO" NUMBER(4,0),
"ENAME" VARCHAR2(10),
"JOB" VARCHAR2(9),
"MGR" NUMBER(4,0),
"HIREDATE" DATE,
"SAL" NUMBER(7,2),
"COMM" NUMBER(7,2),
"DEPTNO" NUMBER(2,0),
CONSTRAINT "EMP_PK" PRIMARY KEY ("EMPNO")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "TS_DATA" ENABLE,
CONSTRAINT "EMP_FK" FOREIGN KEY ("DEPTNO")
REFERENCES "DEMO"."DEPT" ("DEPTNO") ENABLE
) SEGMENT CREATION IMMEDIATE
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "TS_DATA" ;
CREATE INDEX "DEMO"."EMP_IDX" ON "DEMO"."EMP" ("ENAME")
PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "TS_DATA" ;
demo@ORA11G>同时从SQL开发人员导出DDL得到了这个。(在SQL Developer中检查了以下选项-漂亮的打印,终止符,存储,显示架构,向视图添加力,添加字节关键字)
--------------------------------------------------------
-- File created - Monday-October-16-2017
--------------------------------------------------------
--------------------------------------------------------
-- DDL for Table EMP
--------------------------------------------------------
CREATE TABLE "DEMO"."EMP"
( "EMPNO" NUMBER(4,0),
"ENAME" VARCHAR2(10 BYTE),
"JOB" VARCHAR2(9 BYTE),
"MGR" NUMBER(4,0),
"HIREDATE" DATE,
"SAL" NUMBER(7,2),
"COMM" NUMBER(7,2),
"DEPTNO" NUMBER(2,0)
) SEGMENT CREATION IMMEDIATE
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "TS_DATA" ;
--------------------------------------------------------
-- DDL for Index EMP_IDX
--------------------------------------------------------
CREATE INDEX "DEMO"."EMP_IDX" ON "DEMO"."EMP" ("ENAME")
PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "TS_DATA" ;
--------------------------------------------------------
-- DDL for Index EMP_PK
--------------------------------------------------------
CREATE UNIQUE INDEX "DEMO"."EMP_PK" ON "DEMO"."EMP" ("EMPNO")
PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "TS_DATA" ;
--------------------------------------------------------
-- Constraints for Table EMP
--------------------------------------------------------
ALTER TABLE "DEMO"."EMP" ADD CONSTRAINT "EMP_PK" PRIMARY KEY ("EMPNO")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "TS_DATA" ENABLE;问题:
1) 约束EMP_FK在SQL开发人员中缺失,但在SQLCL中可用
2) 如何仅获取DDL命令中的FK约束-尝试了以下命令,但这无济于事。
demo@ORA11G> DDL EMP_FK REF_CONSTRAINTS Object REF_CONSTRAINTS EMP_FK not found demo@ORA11G> demo@ORA11G> DDL EMP_FK CONSTRAINTS Object CONSTRAINTS EMP_FK not found demo@ORA11G>
专家解答
1) 我无法复制。我做到了
工具 => 数据库导出 => 导出DDL。保留所有默认值

我的DDL在底部带有ref约束
2) 看起来可能是一个遗漏。“旧时尚” 的方式可以作为一种变通方法,即
工具 => 数据库导出 => 导出DDL。保留所有默认值
我的DDL在底部带有ref约束
--------------------------------------------------------
-- Ref Constraints for Table EMP
--------------------------------------------------------
ALTER TABLE "SCOTT"."EMP" ADD CONSTRAINT "EMP_FK" FOREIGN KEY ("DEPTNO")
REFERENCES "SCOTT"."DEPT" ("DEPTNO") ENABLE;
2) 看起来可能是一个遗漏。“旧时尚” 的方式可以作为一种变通方法,即
SQL> select dbms_metadata.get_ddl('REF_CONSTRAINT','EMP_DEPT_FK') from dual;
DBMS_METADATA.GET_DDL('REF_CONSTRAINT','EMP_DEPT_FK')
--------------------------------------------------------------------------------
ALTER TABLE "HR"."EMPLOYEES" ADD CONSTRAINT "EMP_DEPT_FK" FOREIGN KEY ("DEPART
MENT_ID")
REFERENCES "HR"."DEPARTMENTS" ("DEPARTMENT_ID") ENABLE
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




