如何使用双击在JOOQ中执行命令



我正在使用代码生成器!

我需要执行以下查询:

SELECT sbcm_ref.process_time_reports_direct_buf_record((SELECT tr.time_reports_buf_id
FROM sbcm_buf.time_reports_direct_buf tr ORDERBY time_reports_buf_id desc limit 1

这是我的命令

DSL.using(connection).select(Routines.processTimeReportsDirectBufRecord(select(TIME_REPORTS_DIRECT_BUF.TIME_REPORTS_BUF_ID).from(TIME_REPORTS_DIRECT_BUF).orderBy(TIME_REPORTS_DIRECT_BUF.TIME_REPORTS_BUF_ID.desc()).limit(1).fetch())).fetch();

错误在哪里?

谢谢!

您可以通过使用DSL.field(Select):将任何Select<R extends Record1<T>>包装为Field<T>

ctx.select(Routines.processTimeReportsDirectBufRecord(field(
select(TIME_REPORTS_DIRECT_BUF.TIME_REPORTS_BUF_ID)
.from(TIME_REPORTS_DIRECT_BUF)
.orderBy(TIME_REPORTS_DIRECT_BUF.TIME_REPORTS_BUF_ID.desc())
.limit(1)
))).fetch();

另请参阅有关标量子查询的手册部分。然而,在这种特殊情况下,你不需要它。为什么不直接写:

ctx.select(Routines.processTimeReportsDirectBufRecord(
max(TIME_REPORTS_DIRECT_BUF.TIME_REPORTS_BUF_ID)
))
.from(TIME_REPORTS_DIRECT_BUF)
.fetch();

最新更新