为啥这个 SQL 会告诉我“在预期的地方找不到 FROM 关键字”?

Posted

技术标签:

【中文标题】为啥这个 SQL 会告诉我“在预期的地方找不到 FROM 关键字”?【英文标题】:Why would this SQL tell me that "FROM keyword not found where expected"?为什么这个 SQL 会告诉我“在预期的地方找不到 FROM 关键字”? 【发布时间】:2012-08-16 21:09:31 【问题描述】:

代码中的这条sql:

SELECT QHR, 
DECODE(DUCKBILLID1,NULL,' ',DUCKBILLID1) "DB1", 
DECODE(DUCKBILLID2,NULL,' ',DUCKBILLID2) "DB2", 
DECODE(DUCKBILLID3,NULL,' ',DUCKBILLID3) "DB3" 
FROM PLATYPUSSCHEDULE 
WHERE PLATYPUSID = :ABCID AND DOW = :DOW

...失败,“FROM 关键字在预期的地方找不到

同样的事情(除了 DBN 周围的引号是 c# 代码中的单引号和双引号,如上所示,在 TOAD 中)在 TOAD 中工作得很好。

【问题讨论】:

你在哪里得到错误?在 C# 或 TOAD 中? 看夏普,是的(我希望我可以写“C#”并完成它) 我刚刚尝试在 Oracle 中运行 select Foo 'f' from Table 并收到相同的错误消息。您需要使用双引号,而不是单引号。 是的,Oracle 中的 2quotes 工作正常;有问题的是 C# 您实际上不需要在列别名周围加上引号。把它们排除在外。 【参考方案1】:

在 C# 中,我希望看到类似的东西

String qry = 
@"SELECT QHR,  
DECODE(DUCKBILLID1,NULL,' ',DUCKBILLID1) ""DB1"",  
DECODE(DUCKBILLID2,NULL,' ',DUCKBILLID2) ""DB2"",  
DECODE(DUCKBILLID3,NULL,' ',DUCKBILLID3) ""DB3""  
FROM PLATYPUSSCHEDULE  
WHERE PLATYPUSID = :ABCID AND DOW = :DOW";

String qry = 
"SELECT QHR,DECODE(DUCKBILLID1,NULL,' ',DUCKBILLID1) \"DB1\",DECODE(DUCKBILLID2,NULL,' ',DUCKBILLID2) \"DB2\",DECODE(DUCKBILLID3,NULL,' ',DUCKBILLID3) \"DB3\" FROM PLATYPUSSCHEDULE WHERE PLATYPUSID = :ABCID AND DOW = :DOW";

我当然不希望看到单引号和双引号互换。

【讨论】:

您需要在@ 之后加倍引号。两个示例都不会编译。【参考方案2】:

您可能需要转义引号 (\")

【讨论】:

有时使用 's 代替 "s 会更容易。

以上是关于为啥这个 SQL 会告诉我“在预期的地方找不到 FROM 关键字”?的主要内容,如果未能解决你的问题,请参考以下文章

有人能告诉我为啥这个方法会进入无限循环吗?

有人能告诉我为啥这个 JSfiddle 在播放完后会重复第一首歌吗?

为啥 LogCat 不告诉我的代码中的错误在哪里

初学QT,在进度条上加一个label,为啥会出现白色底纹啊?哪位大侠能告诉我,这是啥原因啊?

为啥我的 t-sql 左连接不起作用?

一直报错,不明白为啥