sql.call("{call SCHEMA.name_PROCEDURE($par1,$par2,$par3)}"){}
其中sql是数据库连接的实例
这很好用.
现在我需要参数化SCHEMA所以我尝试这样的事情:
sql.call("{call ${schema}.name_PROCEDURE($par1,$par3)}"){}
要么
sql.call("{call " + schema + ".name_PROCEDURE($par1,$par3)}"){}
但没有成功.我不知道为什么这两个代码片段不起作用.还有一些sqlException.我做错了什么?
请帮忙
编辑:
我发现了类似的问题,但仍然没有答案:
http://groovy.329449.n5.nabble.com/Calling-stored-procedures-td344943.html
解决方法 为了比上面的@mtk的答案更明确,请尝试更改:sql.call("{call " + schema + ".name_PROCEDURE($par1,$par3)}"){}
至:
sql.call(GString.EMPTY + "{call " + schema + ".name_PROCEDURE($par1,$par3)}"){}
你第一次尝试将无法工作 – 这是试图绑定过程的名称,它将生成以下形式的sql:
{ call ?.name_PROCEDURE(?,?,?) }
第二个稍微不那么明显. Groovy sql使用GString对象生成sql和绑定列表.但是,因为你从一个原始字符串开始,表达式的结果将是一个原始字符串,所以传递给sql.call的结果如下所示:
{ call schema.name_PROCEDURE(par1,par2,par2) }
不:
{ call schema.name_PROCEDURE(${par1},${par2},${par3}) }
这是你真正想要的.如果par1-3都是数字,那么你可以使用它,但是如果它们是字符串(或者通过替换将被强制转换为字符串的其他类型),这可能不是有效的sql,因此是你的sql异常.
基本上字符串GString = String. Groovy sql期望一个GString实例,以便它可以为此查询正确设置绑定列表.
你可以通过强制字符串成为’GString’实例来解决这个问题. GString定义为GString String = GString.你可以在groovy控制台上看到这个:
groovy> def par1 = 1 groovy> def par2 = 2 groovy> def par3 = 3 groovy> def schema = 'myschema' groovy> println (("{call " + schema + ".name_PROCEDURE($par1,$par3)}").class) groovy> println ((GString.EMPTY + "{call " + schema + ".name_PROCEDURE($par1,$par3)}").class) class java.lang.Stringclass groovy.lang.GString
通过强制“{call”成为GString实例,然后它将沿着’plus’调用级联,因此您可以确保Groovy sql获得创建’正确’绑定列表/ sql所需的输入.
总结以上是内存溢出为你收集整理的如何从groovy调用parametrize sql过程全部内容,希望文章能够帮你解决如何从groovy调用parametrize sql过程所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)