【问题标题】:SQL expressions as column name with Oracle 12c databaseSQL 表达式作为 Oracle 12c 数据库的列名
【发布时间】:2016-12-13 14:30:08
【问题描述】:

我们已将 Oracle 数据库迁移到 12c。我有一个列名 DATE 和 HOUR 的给定表(无法更改)。在我用 c# 使用这个语句之前:

command.CommandText = @"SELECT ""DATE"", ""HOUR"" FROM Table";

此语句未与 12c 一起运行:

ORA-00911: 无效字符

我需要改变什么?谢谢

【问题讨论】:

  • 列名都是大写的吗?
  • @Aleksej 是的
  • @Aleksej DATE是Oracle中的关键字,除非用双引号括起来,否则不能用作标识符。
  • @MT0 我的错,我没有看到引用的(明显)原因......
  • 在 12c 中这个区域似乎没有任何改变。可能是驱动问题?

标签: c# sql oracle


【解决方案1】:

您可以使用双引号(不带\ 转义字符)将关键字指定为数据库中对象的标识符:

SELECT "DATE", "HOUR" FROM Table;

注意:如果您要在标识符周围使用双引号(如果您使用关键字作为列名,则必须这样做),那么您将强制使用区分大小写的名称列,并且每次引用它时必须始终在名称中使用相同的大小写字母 - 请参阅my answer here for more details

【讨论】:

  • 感谢您的回答。在 Oracle SQL Developer 中,这是可行的,但我需要从 c# 进行查询。当我只使用"DATE" 时,它会给我一个错误,因为字符串在第二个" 之后需要一个;
  • @katz 您似乎在问题中给出的示例代码中正确执行了此操作,并给出了答案:How to use a string with quotation marks inside it?
【解决方案2】:

驱动问题

@katz - 请填写详细信息。
谢谢

【讨论】:

    猜你喜欢
    • 2020-02-18
    • 1970-01-01
    • 2019-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-17
    • 2017-12-10
    • 2016-06-23
    相关资源
    最近更新 更多