我试图通过bash shell脚本将sql查询传递到java类中,该脚本从外部EnvFile.properties获取查询。属性文件中的查询如下所示:
DDAQUERY1=SELECT COUNT(1), marketsectordescription FROM PRODUCT GROUP BY marketsectordescription ORDER BY marketsectordescription
查询失败并显示以下错误:
java.sql.SQLSyntaxErrorException: ORA-00936: missing expression
传递给脚本的值如下所示(如Jenkins的控制台输出窗口中所示):
SELECT 'COUNT(1),' marketsectordescription FROM PRODUCT GROUP BY marketsectordescription ORDER BY marketsectordescription
由于单引号(')出现在带括号的语句附近,所以括号似乎肯定会产生某种问题。事实上这是怎么回事?可以采取哪些措施来解决这个问题?
使用以下Jenkins插件将env变量注入到构建中: https://wiki.jenkins-ci.org/display/JENKINS/EnvInject+Plugin
编辑:
看起来它不是括号,而是空格。这是我从prop文件传递的内容> bash script args:
ddaquery1 = SELECT COUNT,marketsectordescription FROM PRODUCT GROUP BY marketsectordescription ORDER BY marketsectordescription
ddaquery2 =从发行人
中选择计数(distinct(smci))以下是进入java应用程序的内容:
ddaquery1:SELECT ddaquery2:COUNT,
这些空格正在对字符串进行删除,并使每个单词后面的空格成为单独的arg []。有谁知道我怎么解决这个问题?
谢谢
答案 0 :(得分:2)
您的查询对我来说似乎很好。考虑不是拼写错误,因为,
投掷COUNT(1)
之后SQLSyntaxErrorException
导致其失败的原因。
DDAQUERY1 = SELECT COUNT(1), marketsectordescription FROM PRODUCT
^ GROUP BY marketsectordescription
ORDER BY marketsectordescription
答案 1 :(得分:1)
解决方案涉及这样的事实:在bash脚本中传递的参数没有引用,因此将空格后的每个单词作为新参数传递,并将错误的字符串传递给java应用程序中的查询变量。