【问题标题】:How do I escape a reserved word in Oracle?如何在 Oracle 中转义保留字?
【发布时间】:2010-11-12 20:09:11
【问题描述】:

在 TSQL 中,我可以使用 Select [table] from tablename 之类的东西来选择名为“table”的列。

如何为 oracle 中的保留字执行此操作?

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

作为进一步的澄清,我有一个名为评论的专栏。由于这是一个保留字,oracle 正在尝试使用它进行选择,因此在解析查询时失败。我试过从表名中选择“评论”,但没有奏效。我会检查一下情况,然后回来。

【问题讨论】:

标签: oracle reserved-words


【解决方案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”。
      猜你喜欢
      • 1970-01-01
      • 2011-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-24
      • 2014-12-14
      相关资源
      最近更新 更多