首页 > 解决方案 > Jooq 更新返回值

问题描述

我尝试更新表中的行并获得结果。如果我做

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 。有什么问题?

标签: javasqljooqvertica

解决方案


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

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

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

目前没有解决方法。如果你想避免使用这样的 API,你可以jOOQ-checker在你的构建中使用模块来产生编译错误,只要你使用不支持的 APIVERTICA


推荐阅读