这个 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 接受?的主要内容,如果未能解决你的问题,请参考以下文章

Oracle/Toad 期望啥日期格式?

sqlserver2000转换成oracle有些字段属性要改。该字段属性下原有数据不变。有啥解决办法。求详解

如何让Oracle识别英文日期格式

oracle中 主键和外键是啥意思?啥地方采用呢?

oracle中 主键和外键是啥意思?啥地方采用呢?

Oracle复习SQL高级查询