Groovy Sql.call如何使用默认值调用SP

时间:2013-08-02 16:25:31

标签: sql groovy

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而不是默认值。

1 个答案:

答案 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的通用解决方案,从此过上幸福的生活。