如何在 JOOQ 中公开新的 SQL 函数

Posted

技术标签:

【中文标题】如何在 JOOQ 中公开新的 SQL 函数【英文标题】:How to expose new SQL function in JOOQ 【发布时间】:2020-06-25 08:48:10 【问题描述】:

我想使用REGEXP_REPLACE sql 函数(我的目标是Postgres),但是在快速检查了JOOQ 中的DSL 类之后,它似乎还没有暴露出来。

我应该如何处理添加新功能的问题?

我可以尝试扩展AbstractFunction,类似于org.jooq.impl.Replace 有没有更通用的方法来调用 JOOQ 的 DSL 未公开的函数?

【问题讨论】:

【参考方案1】:

The REGEXP_REPLACE function has been supported since jOOQ 3.14。在旧版本的 jOOQ 中,当您错过功能时,请使用 plain SQL templating

public static Field<String> regexpReplace(
    Field<String> in, String pattern, String replacement
) 
    return DSL.field(
        "regexp_replace(0, 1, 2)", in.getDataType(), 
        in, 
        DSL.val(pattern), 
        DSL.val(replacement)
    );

【讨论】:

以上是关于如何在 JOOQ 中公开新的 SQL 函数的主要内容,如果未能解决你的问题,请参考以下文章

jOOQ:如何在选择查询中调用 Sql 用户定义函数

如何在带有jooq的普通sql中使用命名参数

如何查看 jOOQ 在编译时执行的 SQL 语句?

如何修复:Jooq 代码不会从 sql 脚本为内存 db 中的 sqlite 生成 java 代码

如何在 JOOQ 中使用 toChar 函数?

SQL 方言如何在 hibernate 和 JOOQ 等框架内部实际工作