2015-08-15 144 views
2

是否可以使用jOOQ创建INSERT INTO ... SELECT ... RETURNING声明?如果是这样,怎么样?jOOQ - INSERT INTO ... SELECT ... RETURNING

没有returning功能在这里:

context.insertInto(table, list of fields).select(select statement).returning() 

如果这确实是不存在的,是有一个聪明的解决方法可用?我无法将我的INSERT INTO ... SELECT ...表示为INSERT INTO ... VALUES ...。有关查询的更多详细信息,请参阅问题jOOQ - multi-field for insertion

回答

2

这个INSERT关键字的组合确实是不可能的,直到通过#3779得到第3.7条。

在此期间,一种解决方法是使用普通的SQL:

Result<Record> result = context.fetch("{0} returning *", insertInto(...).select(...)); 
+0

卢卡斯嗨。这工作正常。不过,我怀疑我的'org.jooq.Converter'(从我的情况下的'Timestamp'到'LocalDateTime')没有被这种方法调用。这需要额外的解决方法吗? (我应该为此打开一个新问题吗?) –

+0

@KevinDeGrote:我明白了,不幸的是,我目前没有看到任何解决方法,也没有深入到jOOQ的内部。一种解决方法是为'INSERT'语句形成CTE,但目前无法用普通SQL来完成。 (https://github.com/jOOQ/jOOQ/issues/4474)。我们需要的是在实际执行“ResultQuery”之前设置“”类型的方法。我已经注册了一个功能请求:https://github.com/jOOQ/jOOQ/issues/4473。感谢您的提醒! –

+0

感谢您的反馈! –