在Groovy中使用命名参数调用SQL存储过程

时间:2013-08-05 18:10:40

标签: sql groovy

private static String XXX = "{call SP_XXX(?,?,?)}"
sql.call (XXX, [Sql.NUMERIC, Sql.NUMERIC,'SOME STRING'){
    outPara1, outPara2 ->
    log.info("${outPara1}, ${outPara2}")
}

我可以使用上面的代码调用存储过程。

但是,当我使用命名参数而不是'?'时占位符。 我得到了:

WARNING: Failed to execute: {call SP_XXX(:OUTP1, :OUTP2, :INP1)} 
because: Invalid column type

我改变的是取代'?'使用“:OUTP1”,“OUTP2”和“:INP1”。 并在call语句中,相应地使用命名参数。 更改后的代码:

private static String XXX = "{call SP_XXX(:OUTP1, :OUTP2, :INP1)}"
sql.call (XXX, [OUTP1: Sql.NUMERIC, OUTP2: Sql.NUMERIC, INP1: 'SOME STRING']){
    outPara1, outPara2 ->
    log.info("${outPara1}, ${outPara2}")
}

1 个答案:

答案 0 :(得分:1)

您正在做的是将map传递给call()我认为我们没有api。此外,SP的占位符必须为?

您可以坚持使用以前的方法或尝试使用GString,如下所示:

def inp1 = 'SOME STRING'
sql.call "{call SP_XXX(${Sql.NUMERIC}, ${Sql.NUMERIC}, $inp1)}", {
    outPara1, outPara2 ->
    log.info("${outPara1}, ${outPara2}")
}

我更喜欢前一种方法。 : - )