これはグルーヴィーな質問というよりも、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 メタクラスに追加できる一般的なソリューションを作成し、その後ずっと幸せに暮らすこともできます。