如何在 Oracle 中转义保留字?
Posted
技术标签:
【中文标题】如何在 Oracle 中转义保留字?【英文标题】:How do I escape a reserved word in Oracle? 【发布时间】:2010-11-12 20:09:11 【问题描述】:在 TSQL 中,我可以使用 Select [table] from tablename
之类的东西来选择名为“table”的列。
如何为 oracle 中的保留字执行此操作?
编辑:我尝试过方括号、双引号、单引号和反引号,它们不起作用...
作为进一步的澄清,我有一个名为评论的专栏。由于这是一个保留字,oracle 正在尝试使用它进行选择,因此在解析查询时失败。我试过从表名中选择“评论”,但没有奏效。我会检查一下情况,然后回来。
【问题讨论】:
Oracle: What exactly do quotation marks around the table name do?的可能重复 【参考方案1】:通过快速搜索,Oracle 似乎使用双引号("
,例如"table"
)显然需要正确的大小写——而对于任何感兴趣的人来说,mysql 默认使用反引号 ( `) 除非设置为使用双引号以实现兼容性。
【讨论】:
我标记了你,因为我试图用双引号转义这个词,但它不起作用。 默认情况下,Oracle 将大写任何标识符。因此,如果您需要小写字符或特殊字符,或者标识符是 Oracle 保留字,则需要将其括在双引号中。由于双引号保留大小写,因此标识符也需要是正确的大小写。 我使用 SQL Developer v4 创建了一个带有“别名”字段的表,该表访问了 Oracle 11g 第 2 版 Express 数据库。当我写“别名”而不是别名时,我的选择起作用了。 不适用于触发器,请尝试为名称违反 ORA-30507(例如 DATABASE)的表创建触发器。 用大写的“TABLE”试试。【参考方案2】: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';
【讨论】:
【参考方案3】:当我将关键字作为列名之一时,双引号在 oracle 中起作用。
例如:
select t."size" from table t
【讨论】:
Oracle DB 很可能将列名大写,并且在引用时,列标识符区分大小写!【参考方案4】:Oracle 确实使用双引号,但您很可能需要将对象名称大写,例如“桌子”。默认情况下,如果您创建一个不带双引号的对象,例如
CREATE TABLE table AS ...
Oracle 会将对象创建为大写。但是,除非您使用双引号,否则引用不区分大小写!
【讨论】:
【参考方案5】:您必须将该列重命名为其他名称,因为 TABLE
已被 Oracle 保留。
在oracle视图V$RESERVED_WORDS
中可以看到Oracle的所有保留字。
【讨论】:
当我尝试select * from V$RESERVED_WORDS
时,我得到了 ORA-00942
。
作者已经说过他们不能重命名或删除表列。你只需要像其他帖子中所说的那样使用双引号“table”。以上是关于如何在 Oracle 中转义保留字?的主要内容,如果未能解决你的问题,请参考以下文章