private static String XXX = "{call SP_XXX(?,?,?,?,?,?,?)}"
sql.call (XXX, [Sql.NUMERIC, Sql.NUMERIC, 'somevalue',default,default,default,'somevalue'])
我想将最后一个IN参数设置为'somevalue'而不设置其他不必要的参数。换句话说,将它们保留为SP中的默认值。
有没有办法在groovy中做到这一点?
注意:默认值不是此处的有效表达式。我可以将它们设置为null。但是,SP将在execusion中使用null而不是默认值。
答案 0 :(得分:0)
我认为这更像是一个JDBC问题,而不是一个常规问题。
无论如何,你可能会这样做:
private static String XXX = "{call SP_XXX(?,?,?,default,default,default,?)"
sql.call (XXX, [Sql.NUMERIC, Sql.NUMERIC, 'somevalue', 'somevalue'])
由于这很明显,我猜你不知道在实例化你的" XXX"时,你会想要使用哪些参数。字符串,在这种情况下,您必须在调用sql.call()
之前以编程方式构建String。
这样的事情,也许(虽然未经测试):
// 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 metaClass的通用解决方案,从此过上幸福的生活。