为啥这个 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 在播放完后会重复第一首歌吗?