我相信这更像是一个 JDBC 问题,而不是一个时髦的问题。
无论如何,你可能会这样做:
private static String XXX = "{call SP_XXX(?,?,?,default,default,default,?)"
sql.call (XXX, [Sql.NUMERIC, Sql.NUMERIC, 'somevalue', 'somevalue'])
由于这很明显,我猜您不知道在实例化“XXX”字符串时要使用哪些参数,在这种情况下,您必须在调用之前以编程方式构建您的字符串sql.call()
。
类似的东西,也许(虽然未经测试):
// params is a HashMap with the param number as key
def callXXX = { params ->
def str = 'call SP_XXX('
def paramsPlaceholders = []
1.upto(7) { i ->
if (params[i]) {
paramsPlaceholders << '?'
} else {
paramsPlaceholders << 'default'
}
}
str += paramsPlaceHolders.join(',')
str += ')'
return sql.call(str, params.values())
}
您甚至可以在此基础上构建一个可以添加到 sql 元类中的通用解决方案,并从此过上幸福的生活。