如何从groovy调用parametrize sql过程

如何从groovy调用parametrize sql过程,第1张

概述我从groovy运行一些程序: sql.call("{call SCHEMA.NAME_PROCEDURE($par1,$par2,$par3)}"){} 其中sql是数据库连接的实例 这很好用. 现在我需要参数化SCHEMA所以我尝试这样的事情: sql.call("{call ${schema}.NAME_PROCEDURE($par1,$par2,$par3)}"){} 要么 sql.cal 我从groovy运行一些程序:

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过程所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1220400.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存