这个 SQL 需要采用啥格式才能让 Oracle 接受?
Posted
技术标签:
【中文标题】这个 SQL 需要采用啥格式才能让 Oracle 接受?【英文标题】: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) 在加倍价值引号时,我仍然得到“;预期”。 【参考方案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 正确解析查询所必需的。
【讨论】:
是的,这两个都有效;谢谢!没有字符串、日期和浮点数,编程会容易得多! ;-)以上是关于这个 SQL 需要采用啥格式才能让 Oracle 接受?的主要内容,如果未能解决你的问题,请参考以下文章