【问题标题】:Jooq update return valueJooq 更新返回值
【发布时间】:2021-02-09 15:45:54
【问题描述】:

我尝试更新表中的行并在之后获得结果。 如果我这样做了

dsl.update(TABLE)
   .set(TABLE.ROW, newRow)
   .where(TABLE.ROW_2.eq(
            dsl.select(ANOTHER_TABLE.ID)
               .from(ANOTHER_TABLE)
               .where(ANOTHER_TABLE.GUID.eq(guid))
   )).execute()

它返回 1。但如果我这样做了

dsl.update(TABLE)
   .set(TABLE.ROW, newRow)
   .where(TABLE.ROW_2.eq(
            dsl.select(ANOTHER_TABLE.ID)
               .from(ANOTHER_TABLE)
               .where(ANOTHER_TABLE.GUID.eq(guid))
   )).returningResult(TABLE.ROW_3).fetchOne()

它返回空结果。但我想在更新后获得 TABLE.ROW_3 。有什么问题?

【问题讨论】:

  • 您使用的是什么数据库产品?
  • 我使用 vertica 9 db

标签: java sql jooq vertica


【解决方案1】:

Vertica 不像 PostgreSQL 那样支持 UPDATE .. RETURNING,这可以在 Vertica 文档中看到: https://www.vertica.com/docs/9.2.x/HTML/Content/Authoring/SQLReferenceManual/Statements/UPDATE.htm

UpdateReturningStep::returningResult 的 jOOQ 文档通过在其 @Support 注释中未列出 SQLDialect.VERTICA 来反映这一点:

@Support({AURORA_POSTGRES,COCKROACHDB,DB2,FIREBIRD,ORACLE,POSTGRES,SQLSERVER})

目前没有解决方法。如果您想避免使用此类 API,则可以在构建中使用 jOOQ-checker 模块,以在使用 VERTICA 不支持的 API 时产生编译错误

【讨论】:

    猜你喜欢
    • 2016-11-29
    • 1970-01-01
    • 2020-11-09
    • 2019-02-19
    • 2014-05-28
    • 2012-03-11
    • 1970-01-01
    • 2020-01-21
    • 2020-05-13
    相关资源
    最近更新 更多