我认为你不能使用这些方法来做到这一点。他们都在后台使用dbms_metata.get_ddl,看起来,还有doesn't have an option to not quote identifiers。看起来 export 也使用了那个包;数据建模者可以选择引用标识符,但不确定这对您是否有用。
不过,只要 DDL 小于 32K,您可以通过从工作表中查询来消除它们。使用默认设置:
create table t42 (id number, str varchar2(10) default 'ABC',
constraint t42_pk primary key (id));
create index i42 on t42(str);
set long 1000
select dbms_metadata.get_ddl('TABLE', 'T42', user) from dual;
select dbms_metadata.get_dependent_ddl('INDEX', 'T42', user) from dual;
CREATE TABLE "STACKOVERFLOW"."T42"
( "ID" NUMBER,
"STR" VARCHAR2(10) DEFAULT 'ABC',
CONSTRAINT "T42_PK" PRIMARY KEY ("ID")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255
TABLESPACE "USERS" ENABLE
) SEGMENT CREATION DEFERRED
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
TABLESPACE "USERS"
CREATE UNIQUE INDEX "STACKOVERFLOW"."T42_PK" ON "STACKOVERFLOW"."T42" ("ID")
PCTFREE 10 INITRANS 2 MAXTRANS 255
TABLESPACE "USERS"
CREATE INDEX "STACKOVERFLOW"."I42" ON "STACKOVERFLOW"."T42" ("STR")
PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
TABLESPACE "USERS"
稍加操作:
begin
dbms_metadata.set_transform_param(dbms_metadata.SESSION_TRANSFORM,
'PRETTY', false);
dbms_metadata.set_transform_param(dbms_metadata.SESSION_TRANSFORM,
'SQLTERMINATOR', true);
dbms_metadata.set_transform_param(dbms_metadata.SESSION_TRANSFORM,
'CONSTRAINTS_AS_ALTER', true);
dbms_metadata.set_transform_param(dbms_metadata.SESSION_TRANSFORM,
'SEGMENT_ATTRIBUTES', false);
end;
/
select replace(dbms_metadata.get_ddl('TABLE', 'T42', user), '"', null)
from dual;
select replace(dbms_metadata.get_dependent_ddl('INDEX', 'T42', user), '"', null)
from dual;
CREATE TABLE STACKOVERFLOW.T42 (ID NUMBER, STR VARCHAR2(10) DEFAULT 'ABC') ;
ALTER TABLE STACKOVERFLOW.T42 ADD CONSTRAINT T42_PK PRIMARY KEY (ID) ENABLE;
CREATE UNIQUE INDEX STACKOVERFLOW.T42_PK ON STACKOVERFLOW.T42 (ID) ;
CREATE INDEX STACKOVERFLOW.I42 ON STACKOVERFLOW.T42 (STR) ;