如何在Oracle中转义保留字?

157
在TSQL中,我可以使用类似的语法Select [table] from tablename来选择一个名为"table"的列。
那么在Oracle中,我该如何处理保留字呢?
编辑:我已经尝试过方括号、双引号、单引号和反引号,但都不起作用...
进一步解释一下,我有一个被命名为comment的列。由于这是一个保留字,当我尝试选择该列时,Oracle会出现错误,无法解析查询。我已经尝试过使用Select "comment" from tablename,但没有成功。我会检查大小写并回来再试。

可能是重复的问题:Oracle:表名周围的引号到底是做什么用的? - user123444555621
5个回答

224

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


2
我给你打了分数,因为我尝试使用双引号来转义这个单词,但它没有起作用。 - Spence
18
默认情况下,Oracle 会将任何标识符转换为大写。因此,如果需要小写字符或特殊字符,或者标识符是 Oracle 保留字,则需要将其放入双引号中。由于双引号保留大小写,因此标识符还需要正确的大小写形式。 - Metro
我使用SQL Developer v4连接Oracle 11g Release 2 Express数据库创建了一个带有“别名”字段的表。当我写成“ALIAS”而不是alias时,我的查询可以正常工作。 - Broken_Window
无法为触发器工作,请尝试为一个表创建触发器,该表的名称违反了ORA-30507(例如DATABASE)。 - luukvhoudt
1
尝试将其全部大写为“TABLE”。 - RSHAP

40

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

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';

10

当我将关键字作为列名之一时,在Oracle中使用双引号可以正常工作。

例如:

select t."size" from table t 

很可能 Oracle 数据库的列名是大写的,并且当用引号括起来时,列标识符区分大小写! - Steve Jones

5

Oracle使用双引号,但您最有可能需要将对象名称大写,例如 "TABLE"。默认情况下,如果您创建一个没有双引号的对象,例如

CREATE TABLE table AS ...

Oracle会将对象创建为大写字母。然而,引用是不区分大小写的,除非您使用双引号!


-9

你必须将该列重命名为其他名称,因为TABLE被Oracle保留。

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


当我尝试从V$RESERVED_WORDS中选择所有内容时,出现了ORA-00942错误。 - ceving
作者已经说过他们无法重命名或删除表列。你只需要像其他帖子中所说的那样使用双引号“table”。 - vytaute

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接