首页 > 解决方案 > org.jooq.impl.ParserException: Token ')' 预期: [1:11] select (@i[*]:=@i+1)

问题描述

如何解决这个问题?谢谢!

ResultQuery<?> query2 = create
                    .parser()
                    .parseResultQuery("select (@i:=@i+1)");

标签: javamysqlsqljooq

解决方案


jOOQ 还不支持 MySQL 的 SQL 变量。相关功能请求在这里:https ://github.com/jOOQ/jOOQ/issues/2558

在普通的 jOOQ API 使用中,您将求助于使用普通 SQL 模板,但目前在使用解析器时没有解决方法。我创建了一个功能请求来实现这种解决方法语法:https ://github.com/jOOQ/jOOQ/issues/9260它可能类似于:

select /* [jooq field start] */ @i := @i + 1 /* [jooq field stop] */

从 jOOQ 3.12 开始,jOOQ 支持许多 RDBMS 的过程语言,包括 MySQL。您仍然不能使用 jOOQ 从 SQL 语句中操作变量,但您可以在此处使用命令式变量赋值

i.set(i.plus(1))

请注意,在许多情况下,从 MySQL 8 的窗口函数支持开始,不再需要在纯 SQL 中使用这种特定于供应商且不再严格声明式编程风格的语法。


推荐阅读