0
private static String XXX = "{call SP_XXX(?,?,?,?,?,?,?)}"
sql.call (XXX, [Sql.NUMERIC, Sql.NUMERIC, 'somevalue',default,default,default,'somevalue'])

我想将最后一个 IN 参数设置为“somevalue”,而不设置其他不必要的参数。换句话说,将它们保留为 SP 中的默认值。

有没有办法在 groovy 中做到这一点?

注意:default 在这里不是有效的表达式。我可以将它们设置为空。但是,SP 将在执行中使用 null 而不是默认值。

4

1 回答 1

0

我相信这更像是一个 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 元类中的通用解决方案,并从此过上幸福的生活。

于 2013-08-14T17:15:17.713 回答