【问题标题】:org.jooq.impl.ParserException: Token ')' expected: [1:11] select (@i[*]:=@i+1)org.jooq.impl.ParserException: Token ')' 预期: [1:11] select (@i[*]:=@i+1)
【发布时间】:2020-01-23 08:16:34
【问题描述】:

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

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

【问题讨论】:

    标签: java mysql sql jooq


    【解决方案1】:

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

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

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

    从 jOOQ 3.12 开始,jOOQ 支持许多 RDBMS 的procedural languages,包括 MySQL。您仍然不能使用 jOOQ 从 SQL 语句中操作变量,但您可以在此处使用 imperative style variable assignment

    i.set(i.plus(1))
    

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

    【讨论】:

    • 感谢您的回答。我终于以这种方式解决了! WindowPartitionByStep over = rowNumber().over(); Field cast = over.cast(Long.class); `
    猜你喜欢
    • 2012-01-13
    • 2015-08-17
    • 2015-05-24
    • 1970-01-01
    • 2014-02-22
    • 2020-05-24
    • 2022-07-13
    • 1970-01-01
    • 2021-02-10
    相关资源
    最近更新 更多