【问题标题】:What format does this SQL need to be in for Oracle to accept it?这个 SQL 需要采用什么格式才能让 Oracle 接受?
【发布时间】:2012-05-08 16:34:14
【问题描述】:

我依次尝试了以下所有方法:

1) // 就像在旧代码中一样

ocmd.CommandText = "SELECT TRUNC(SYSDATE,''DD'') "VALUE" FROM DUAL";

2) // 添加@

ocmd.CommandText = @"SELECT TRUNC(SYSDATE,''DD'') "VALUE" FROM DUAL";

3) // 试试单引号

ocmd.CommandText = "SELECT TRUNC(SYSDATE,''DD'') 'VALUE' FROM DUAL";

4) // 试试两个单引号,比如 DD

ocmd.CommandText = "SELECT TRUNC(SYSDATE,''DD'') ''VALUE'' FROM DUAL";

5) // 试试@

ocmd.CommandText = @"SELECT TRUNC(SYSDATE,''DD'') ''VALUE'' FROM DUAL";

1 和 2 给了我编译时错误:“;预期”(在“VALUE”上)

3、4 和 5 给了我“Message=ORA-00907:缺少右括号”

【问题讨论】:

  • 好吧,我不是 Oracle 专家,但我猜: "SELECT TRUNC(SYSDATE,''DD'') ""VALUE"" FROM DUAL";根据您的错误消息。
  • @MarkByers,我已经删除了你提出的答案。但是保留的 VALUE 应该在 " 中。但我不是 100% 会在解析时失败。
  • @Vash:好的,我认为你是对的。似乎它解析正确。 sqlfiddle.com/#!4/d41d8/369
  • @MarkByers,但是应该避免关键字或使用“”传递关键字。顺便说一句,漂亮的页面(sqlfiddle.com)
  • 在加倍价值引号时,我仍然得到“;预期”。

标签: c# sql winforms oracle quotes


【解决方案1】:

以下查询将在 Oracle 中运行:(sqlfiddle)

SELECT TRUNC(SYSDATE, 'DD') "VALUE" FROM DUAL

但是,如果要在 C# 中的常规字符串文字中写入双引号,则需要使用反斜杠对其进行转义:

ocmd.CommandText = "SELECT TRUNC(SYSDATE, 'DD') \"VALUE\" FROM DUAL";

如果您出于某种原因更愿意使用逐字字符串文字,那么您需要用另一个双引号转义一个双引号:

ocmd.CommandText = @"SELECT TRUNC(SYSDATE, 'DD') ""VALUE"" FROM DUAL";

注意:正如 Vash 在评论中指出的那样,围绕 VALUE 的双引号实际上并不是 Oracle 正确解析查询所必需的。

【讨论】:

  • 是的,这两个都有效;谢谢!没有字符串、日期和浮点数,编程会容易得多! ;-)
猜你喜欢
  • 2017-08-14
  • 1970-01-01
  • 2014-08-24
  • 1970-01-01
  • 2010-10-15
  • 1970-01-01
  • 2012-05-04
  • 2021-09-02
  • 1970-01-01
相关资源
最近更新 更多