Jooq 更新返回值

huangapple go评论139阅读模式
英文:

Jooq update return value

问题

我尝试更新表中的行并在之后获取结果。
如果我执行以下操作:

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

英文:

I try to update rows in table and get results after.
If I do

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()

it returns 1. But if I do

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()

it returns empty result. But I want to get TABLE.ROW_3 after update. Whats the problem?

答案1

得分: 0

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时产生编译错误。

英文:

Vertica doesn't support UPDATE .. RETURNING like PostgreSQL, as can be seen in the Vertica docs:
https://www.vertica.com/docs/9.2.x/HTML/Content/Authoring/SQLReferenceManual/Statements/UPDATE.htm

The jOOQ documentation of UpdateReturningStep::returningResult reflects this by not listing SQLDialect.VERTICA in its @Support annotation:

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

There's currently no workaround for this. If you want to avoid using such API, you could use the jOOQ-checker module in your build to produce compilation errors whenever you use API that is not supported by VERTICA

huangapple
  • 本文由 发表于 2020年10月27日 19:09:45
  • 转载请务必保留本文链接:https://go.coder-hub.com/64553166.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定