使用output_expression INSERT ... RETURNING

时间:2017-09-05 23:43:20

标签: postgresql jooq

PostgresQL INSERTs允许使用插入列的任何子集返回output_expression,但我无法使用jOOQ使用此功能的语法正确。

这是PL / pgSQL等同于我想要实现的目标:

CREATE TABLE my_table (i INTEGER, t TEXT);

DO 
    $$DECLARE my_var TEXT; 
BEGIN 
    INSERT INTO my_table(i, t) 
        VALUES(1, 'hello') 
        RETURNING (t) INTO my_var;

    RAISE NOTICE 'Inserted text was --> % <--', my_var; 
END$$;

但我发现问题是这个语法在jOOQ中无效:

String retVal = using(configuration)
    .insertInto(MY_TABLE,
        MY_TABLE.I,
        MY_TABLE.T)
    .values(i, t)
    .returning(MY_TABLE.T)
    .fetchInto(String.class);

我最接近的是使用fetchOne获取完整MyTableRecord并选择我想要的字段。还有另一种方法告诉jOOQ准确地获取我想要的变量类型吗?

P.D。:我正在使用jOOQ 3.9.2

2 个答案:

答案 0 :(得分:0)

您可以使用content

答案 1 :(得分:0)

我找到的解决方法如下,它利用了Java的Optional

String retVal = using(configuration)
    .insertInto(MY_TABLE,
        MY_TABLE.I,
        MY_TABLE.T)
    .values(i, t)
    .returning()
    .fetchOptional()
    .map(MyTableRecord::getT)
    .orElse(null);