如何在Oracle中转义保留字?


134

在TSQL中,我可以使用类似于Select [table] from tablename选择名为“表”的列的方式。

我该如何在oracle中保留字呢?

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

作为进一步的说明,我有一列名为“评论”的人。由于这是一个保留字,因此oracle会发抖,试图用它来选择,这在解析查询时失败了。我试过从表名中选择“注释”,但是没有用。我会检查情况再回来。


Answers:


195

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


2
我给您打下了标语,因为我尝试使用双引号将其转义,但此操作无效。
Spence

13
默认情况下,Oracle将大写所有标识符。因此,如果您需要小写字符或特殊字符,或者标识符是Oracle保留字,则需要用双引号将其引起来。由于双引号保留大小写,因此标识符也必须是正确的大小写。
地铁

我使用SQL Developer v4创建了一个带有“别名”字段的表,并命中了Oracle 11g Release 2 Express数据库。当我写“ ALIAS”而不是别名时,我的选择起作用了。
Broken_Window

对于触发器不起作用,请尝试为名称违反ORA-30507的表创建触发器(例如DATABASE)。
Fleuv

在所有大写的“ TABLE”中尝试。
RSHAP

34

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

SELECT "MyColumn" AS "MyColAlias"
FROM "MyTable" "Alias"
WHERE "ThisCol" = 'That Value';

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

SELECT MyColumn AS MyColAlias
FROM MyTable Alias
WHERE ThisCol = 'That Value';

在内部转换为类似:

SELECT "ALIAS" . "MYCOLUMN" AS "MYCOLALIAS"
FROM "THEUSER" . "MYTABLE" "ALIAS"
WHERE "ALIAS" . "THISCOL" = 'That Value';

8

当关键字具有列名之一时,双引号在oracle中起作用。

例如:

select t."size" from table t 

3

Oracle的确使用双引号,但是您很可能需要将对象名大写,例如“ TABLE”。默认情况下,如果创建的对象没有双引号,例如

CREATE TABLE table AS ...

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


-8

您必须将列重命名为其他名称,因为TABLEOracle保留了该列。

您可以在oracle视图中查看Oracle的所有保留字V$RESERVED_WORDS


ORA-00942尝试的时候得到了select * from V$RESERVED_WORDS
2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.