【问题标题】:jOOQ - CTE and INSERTjOOQ - CTE 和插入
【发布时间】:2015-11-16 11:56:57
【问题描述】:

在 PostgreSQL 中,可以将 INSERT 查询放入 WITH 子句中:

with a as (
    insert into table(...) values(...) returning *
)
select a.*
from a

jOOQ 支持这个吗?好像只支持WITH + SELECT

更新

WithAsStep 类只支持选择,但WithStep 类似乎支持所有查询。 context.with(CommonTableExpression<?>...)(返回WithStep)构造如何工作?我在文档中找不到任何有用的东西。

【问题讨论】:

  • 仅供参考,WITH + DELETEUPDATE 也受 PostgreSQL 支持。

标签: sql postgresql common-table-expression jooq


【解决方案1】:

目前,这在 jOOQ 3.6 中是不可能的,因为 INSERT .. RETURNING 返回的类型不是 Select<?> 的子类型,需要将其放入 jOOQ 的 WithAsStep.as() 方法中。有一个功能请求 #4474 来增强 WithAsStep.as() 以接受 ResultQuery,但是,INSERT .. RETURNING 语句首先也需要实现它。

恐怕没有简单的解决方法。此外,在 jOOQ 3.6 中,尚不支持带有 DML 的 CTE(DELETEUPDATEINSERT)。相关功能请求是#3174

【讨论】:

  • 感谢您的反馈!您可以将此视为对twitter.com/JavaOOQ/status/634688927752953856 问题的回答;)。再次感谢。
  • @KevinDeGrote:好点,虽然我不能保证这可以在不破坏向后兼容性的情况下在 3.x 中完成......不过,如果 PostgreSQL 特性真的很好,那就太可惜了!跨度>
  • 如果不可能也没问题!我已经对目前的可能性感到非常满意。我希望我能说服我的同事放弃他们花哨的 ORM :)。
猜你喜欢
  • 2019-03-26
  • 2014-07-23
  • 1970-01-01
  • 2020-11-03
  • 2014-12-02
  • 2018-08-13
  • 2014-05-26
  • 2015-06-03
相关资源
最近更新 更多