在 Jooq 中将函数指定为值

Specify function as value in Jooq

使用Jooq,我想在插入期间指定一个字段的值作为一个函数。

在 SQL 服务器中,等效查询是:

insert into table (a, t) values ('foo', SYSDATETIME())

将绑定值与表达式混合:

假设您使用的是 generated code,这样写:

// Assuming this static import, as always:
import static org.jooq.impl.DSL.*;

ctx.insertInto(TABLE)
   .columns(TABLE.A, TABLE.T)
   .values(val("foo"), currentTimestamp()) // or currentLocalDateTime()
   .execute();

VALUES() 子句只有 2 个重载:

  • 只接受绑定变量
  • 只接受表达式

它没有混合两种东西的重载,因为需要的重载会呈指数级增长。所以这里要做的关键是明确包装你的bind variables using DSL.val()

另见这个问题:

关于 SYSDATETIME

的注释

jOOQ 通过 DSL.currentTimestamp() and DSL.currentLocalDateTime(). If you prefer using SYSDATETIME, you can create a plain SQL template for that, or use DSL.function()

支持标准 SQL CURRENT_TIMESTAMP 表达式