You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

jOOQ转换POSTGRES SQL到H2报未知函数错误,如何开启未知函数解析?

报错原因

jOOQ默认配置下,解析器遇到未在当前方言中注册的函数会直接抛出异常,官方在线转换工具默认开启了「允许解析未知函数」的配置,因此可以正常处理该SQL。

解决方案

构造解析用的DSLContext时传入自定义Settings,开启未知函数解析即可,3.13.6版本的修改后代码如下:

import org.jooq.conf.Settings;
import org.jooq.conf.ParseUnknownFunctions;

// 构造配置,开启未知函数解析
Settings parserSettings = new Settings()
        .withParseUnknownFunctions(ParseUnknownFunctions.ALLOW);

Query query = DSL
    .using(SQLDialect.POSTGRES, parserSettings)
    .parser()
    .parseQuery("select split_part(some_field, '@', 2) from test");
// 注意原代码此行末尾多了一个多余右括号,已修正
String convertedQuery = DSL.using(SQLDialect.H2).render(query);

补充说明

开启该配置后,解析器会将所有未识别的函数作为通用自定义函数处理,后续渲染到H2方言时,jOOQ会自动完成split_part这类通用函数的方言适配,最终输出的H2语法和官方在线工具转换结果一致。需要注意开启该配置后,解析器不会对函数名拼写做严格校验,拼写错误的函数会被直接渲染到最终SQL中,执行阶段才会报错。

内容的提问来源于stack exchange,提问作者user4725450

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 16:06:06