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

Oracle SQL Developer 4.0-如何删除脚本中的双引号,oracle,oracle-sqldeveloper,Oracle,Oracle Sqldeveloper,我正在运行Oracle SQL Developer 4.0。当我编写一个表的脚本时,所有者、表名、列名、约束名等都用双引号括起来。我查看了工具->首选项,但找不到任何关闭它的选项。有人知道如何编写没有这些引号的表吗 谢谢你我认为你用那些方法做不到。他们都在使用dbms\u metata.get\u ddl在引擎盖下,看起来就是这样。看起来export也使用该软件包;data Modeler有一个引用标识符的选项,但不确定这是否对您有用 不过,只要DDL小于32K,您就可以通过从工作表中查询来消除

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


谢谢你

我认为你用那些方法做不到。他们都在使用
dbms\u metata.get\u ddl
在引擎盖下,看起来就是这样。看起来export也使用该软件包;data Modeler有一个引用标识符的选项,但不确定这是否对您有用

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

它们是个问题吗?就我个人而言,我觉得它们很难看,只要你没有混合的大小写标识符或其他需要引用的东西,它们就不需要了,但它们在脚本中会有伤害吗?您是否还可以澄清您是如何生成此数据的?查看表时,可以从“SQL”选项卡生成,也可以通过自己的
dbms\u metadata
命令生成?单击表时,选择SQL选项卡,此处显示的脚本包含双引号。或者,当我右键单击表格并选择Quick DDL时,引号也包含在这里。我通常首先检查是否存在任何有问题的标识符(例如,
“UglyCamelCase”
),如果没有,我会进行搜索并替换以删除
s,然后突出显示代码并反复按Ctrl+”将大小写更改为所需的标准。然后我保存脚本并将其签入源代码管理,这样我就再也不必这样做了:)Alex,谢谢你的代码片段。get_dll()似乎只提供表结构,不包括索引、约束、默认值等。有没有办法获取表的完整脚本?谢谢@悉尼-它应该已经包括约束和默认值。对于索引和其他依赖对象,您需要使用其他
dbms\u元数据
调用。SQL Developer为您隐藏了复杂性,但正在执行相同的步骤。好的,我必须浏览您提供的示例。我之前为表运行get_dll时,它没有包含列约束@sydney-您可以选择排除或包含它们,但默认情况下应该包含它们。奇怪。你可以在答案的链接中看到选项。我找到了一种更简单的方法。我使用了Oracle数据建模器。我导入了所有对象并生成了脚本。此工具不生成引号。想想看……:)