java - org.jooq.impl.ParserException: Token ')' 预期: [1:11] select (@i[*]:=@i+1)
问题描述
如何解决这个问题?谢谢!
ResultQuery<?> query2 = create
.parser()
.parseResultQuery("select (@i:=@i+1)");
解决方案
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 中使用这种特定于供应商且不再严格声明式编程风格的语法。
推荐阅读
- python - For循环不打印以0结尾的数字?
- c++ - 如何执行此函数调用
- javascript - 带有 CryptoJS 的 VueJS 哈希文件
- python - 在 ipywidgets 中使用交互?
- clang - 铿锵冰的奇怪重复模板模式(CRTP)
- oracle - 什么是用户 IO 等待事件,例如“单元单块物理读取”、“单元多块物理读取”、“直接路径读取”和“单元智能表扫描”
- python - pandas matplotlib x 轴仅每五个位置标记一次
- html - 输入从具有弹性基础自动的小容器中分离出来
- sql - 从 SQL 中的 URL 中提取整数 ID
- azure - Cosmos DB IN 子句通过 REST API