如何逃避Oracle中的保留字?

Spe*_*nce 122 oracle reserved-words

在TSQL中,我可以使用类似于Select [table] from tablename选择名为"table"的列.

如何在oracle中保留单词?

编辑:我试过方括号,双引号,单引号和反引号,它们不起作用......

作为进一步的澄清,我有一个名为评论的专栏.因为这是一个保留字oracle正在试图用它来选择摇摆,它在解析查询时失败了.我试过从表名中选择"评论",但它没有用.我会检查案件并回来.

eye*_*ess 180

通过快速搜索,Oracle似乎使用双引号("例如"table")并且显然需要正确的大小写 - 对于任何感兴趣的人,MySQL默认使用反引号(`),除非设置为使用双引号以实现兼容性.

  • 默认情况下,Oracle将对任何标识符进行更新.因此,如果您需要小写字符或特殊字符,或者标识符是Oracle保留字,则需要用双引号括起来.由于双引号保留大小写,标识符也需要是正确的大小写. (10认同)
  • 我把你标记了下来,因为我试图用双引号来转义这个词,但它没有用。 (2认同)

Jef*_*emp 32

Oracle通常需要使用双引号来分隔SQL语句中的标识符名称,例如

SELECT "MyColumn" AS "MyColAlias"
FROM "MyTable" "Alias"
WHERE "ThisCol" = 'That Value';
Run Code Online (Sandbox Code Playgroud)

但是,它慷慨地允许省略双引号,在这种情况下它会悄悄地将标识符转换为大写:

SELECT MyColumn AS MyColAlias
FROM MyTable Alias
WHERE ThisCol = 'That Value';
Run Code Online (Sandbox Code Playgroud)

内部转换为:

SELECT "ALIAS" . "MYCOLUMN" AS "MYCOLALIAS"
FROM "THEUSER" . "MYTABLE" "ALIAS"
WHERE "ALIAS" . "THISCOL" = 'That Value';
Run Code Online (Sandbox Code Playgroud)


小智 8

当我将关键字作为列名之一时,双引号在oracle中工作.

例如:

select t."size" from table t 
Run Code Online (Sandbox Code Playgroud)


And*_*int 5

Oracle 确实使用双引号,但您很可能需要将对象名称置于大写,例如“TABLE”。默认情况下,如果您创建一个不带双引号的对象,例如

CREATE TABLE table AS ...
Run Code Online (Sandbox Code Playgroud)

Oracle 会以大写形式创建对象。但是,除非使用双引号,否则引用不区分大小写!