Oracle SQL Developer 4.0 - 如何删除脚本中的双引号

时间:2014-02-25 15:31:17

标签: oracle oracle-sqldeveloper

我正在运行Oracle SQL Developer 4.0。当我编写一个表的脚本时,所有者,表名,列名,约束名等都用双引号括起来。我查看了工具 - >首选项,但无法找到任何关闭它的选项。有没有人知道如何在没有这些引号的情况下编写表格?

谢谢

1 个答案:

答案 0 :(得分:1)

我认为你不能用这些方法做到这一点。它们都在引擎盖下使用dbms_metata.get_ddl,而doesn't have an option to not quote identifiers。看起来导出也使用该包; data modeller有一个引用标识符的选项,但不确定它是否对您有用。

只要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) ;