【问题标题】:"date" as a column name“日期”作为列名
【发布时间】:2011-12-12 03:19:04
【问题描述】:

我有一个叫做日历的表。

其中一列名为“日期”

当我想选择日期列时,它给出错误 ORA-01747 即无效 table.column。

select date from calendars

我猜这是因为“日期”是 pl/sql 的保留字。问题是甚至无法更改列名:

alter table calendars rename column date to date_d

结果是:ORA-00904 错误:标识符无效。

你有什么建议?

谢谢。

【问题讨论】:

  • 请粘贴您的“desc calendars”
  • 真的应该是有效的使用(任何)保留字作为列名作为"date"[date](但也许后者是TSQL?),但是我不使用 Oracle 所以......也许架构不符合预期?
  • (顺便说一句,尽我所能,我什至无法在 oracle 中创建一个包含名为 date 的列的表)
  • 是的,但你可以 --> 创建表 a(“DATE”日期),如果你想让表用户受苦:)

标签: database oracle database-design ora-00904 ora-01747


【解决方案1】:

你试过了吗

select calendars.date from calendars; /* or you could alias "calendars" if you don't want to type so much */

如果这不起作用或没有帮助,您是否尝试过删除该列(或者尝试使用表名前缀引用它:calendars.date)?


我还发现了这个帖子:How do I escape a reserved word in Oracle?

如果你使用双引号,那么Oracle似乎会区分大小写

select "date" from calendars;

不一样
select "Date" from calendars;

【讨论】:

  • 添加表名或别名时出现 ORA-01747 错误。我没有尝试删除该列,但从日历中选择 * 没有问题。因此,如果不采取任何进一步的行动,我不需要删除该列。
  • 从日历中选择“日期”解决了它。这是日期,不是日期。
【解决方案2】:

尝试用双引号转义保留字。

select "date" from calendars

【讨论】:

  • 双引号似乎使 Oracle 在查找 date 列时以区分大小写的方式行事。
  • @FrustratedWithFormsDesigner 这是真的。使用双引号时,大小写必须完全匹配。
【解决方案3】:

date 是保留关键字,因此不能像这样使用

从某个表中选择日期

这个问题可以有多种解决方案

  • 日期列需要用括号括起来,如

从表名中选择 [日期]

  • 将保留关键字括在反引号中

从表名中选择“日期”

  • 使用别名

从表名中选择表名.日期

【讨论】:

    猜你喜欢
    • 2020-09-08
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    • 1970-01-01
    • 2013-06-04
    • 2017-05-06
    • 1970-01-01
    • 2012-12-06
    相关资源
    最近更新 更多