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

Я могу успешно выполнить хранимую процедуру с указанным выше кодом.Вызовите хранимую процедуру SQL с именованным параметром в Groovy

Но, когда я использую именованные параметры вместо '?' заполнитель. Я получаю:

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

Что изменилось в заменило '?' с ": OUTP1", "OUTP2" и ": INP1". И в выражении вызова, используя именованные параметры соответственно. Код после изменения:

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}") 
} 
+0

Был ли мой ответ полезным? – dmahapatro

ответ

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}") 
} 

Я предпочел бы прежний подход вместо этого. :-)

Смежные вопросы