【问题标题】:Cast table name to OID using jooq使用 jooq 将表名转换为 OID
【发布时间】:2021-03-06 01:49:28
【问题描述】:

我需要使用 JOOQ 将表名转换为对象标识符。在普通的 SQL 中,我会这样做:

'my_table'::regclass::oid

我找不到用于转换值的 DataType(它存在 PostgresDataType.OID,但不存在 PostgresDataType.REGCLASS 或类似的东西,也不推荐直接使用 PostgresDataType)。

我也玩过DSL.inlineDSL.val,但无法获得想要的输出。

更新

我意识到有一个 PostgresDSL.oid 返回 Field<Long> 并产生以下输出 "my_table".oid,但我没有表的引用(我有表名作为文本),所以它对我的无效用例。


有没有办法通过 JOOQ 将表名转换为 Postgres 对象标识符 (OID)?

【问题讨论】:

    标签: sql postgresql jooq


    【解决方案1】:

    经过一段时间的测试,我找到了一个可行的解决方案(不确定最好的)。

    DSL.field("{0}::regclass::oid", DSL.inline(name))
    

    通过这种方式,我们创建了一个“字段”,其中包含硬编码所需的所有强制转换并将值设置为绑定。

    【讨论】:

    • “不确定最好的” - 是的,就是这样
    • 感谢您的评论和@Lukas 的出色工作。 jooq 帮了我很多!
    猜你喜欢
    • 2021-05-19
    • 2019-03-31
    • 1970-01-01
    • 2013-08-26
    • 2016-05-15
    • 1970-01-01
    • 2020-02-20
    • 2016-04-11
    • 2014-11-17
    相关资源
    最近更新 更多