Проблема в том, что метод SQL-запроса видит GString со встроенными ссылками на переменные и превращает каждую ссылку в? в подготовленном заявлении.
Итак:
sql.query("select * from table where col = ${value}")
... эквивалентно:
sql.query("select * from table where col = ?", [ value ])
Но также:
sql.query("select * from ${db}.table where col = ${value}")
эквивалентно:
sql.query("select * from ?.table where col = ?", [ db, value ])
... что не удается на уровне БД, поскольку оператор выбора недопустим.
Очевидный обходной путь - использовать явно подготовленную версию оператора запроса ().
dbs.each{ db->
sql.eachRow("select * from ${db}.mail where mid=?", m, {
println "\t$db ${it.mid}"
});
}
Однако класс Sql предоставляет вам метод expand (), который, похоже, предназначен для этой цели.
dbs.each{ db ->
sql.eachRow(
"select * from ${Sql.expand(db)}.mail where mid=${m}",
{ println "\t$db ${it.mid}"} );
}