我需要根据用户输入更改查询的架构名称。 如何在运行时将模式名称传递/更改为JOOQ查询? 谢谢。
答案 0 :(得分:0)
您要研究一个名为runtime schema mapping的功能。您可以提供输入/输出架构名称对,这些名称将用于映射生成的SQL中所有对象的架构名称:
matches
您现在可以使用上面的var inputScore = 75;
db.gtlt.aggregate( [
{ $addFields: {
matches: {
$switch: {
branches: [
{
case: { $eq : [ "$condition", "gt" ] },
then: { $cond: [ { $gt: [ inputScore, "$score" ] }, true, false ] }
},
{
case: { $eq : [ "$condition", "lt" ] },
then: { $cond: [ { $lt: [ inputScore, "$score" ] }, true, false ] }
},
],
default: false
}
}
} },
{ $match: { matches: true } },
{ $project: { matches: 0 } }
] )
编写这样的查询:
/**
* Call is in held state.
*
* **AOSP**: BluetoothHeadsetClientCall.CALL_STATE_HELD
*/
生成的SQL将是:
DSLContext ctx = DSL.using(connection, new Settings().withRenderMapping(
new RenderMapping().withSchemata(
new MappedSchema().withInput("INPUT").withOutput("OUTPUT")
)
));
除了完全限定架构之外,还可以阻止使用DSLContext
生成架构名称,然后使用DSLContext.setSchema()
或其他方法指定数据库连接的默认架构。 / p>