我有一张PK表和另一列其他id。在某些情况下,我需要在两列中插入具有相等值的记录。对于主键值,我使用的是序列,它从Field<Long>
得到Sequences.MY_SEQ.nextval()
。
如何从Field<Long>
中提取值以保证在两列中插入相同的ID?在insert子句中使用Field<Long>
会在列中生成2个不同的ID。
答案 0 :(得分:1)
以下是解决方案:
Long id = dsl.select(Sequences.MY_SEQ.nextval()).fetchOne().value1();
答案 1 :(得分:1)
Your own solution当然有效,但它会产生两次往返数据库的往返。一个用于获取序列值,另一个用于插入。如果那不是问题,那就完美了。否则,您仍然可以使用INSERT .. SELECT
在一个查询中执行此操作:
(使用Oracle语法。您的SQL语法可能会有所不同......)
INSERT INTO my_table (col1, col2, val)
SELECT t.id, t.id, 'abc'
FROM (
SELECT my_seq.nextval AS id
FROM dual
) t
Table<?> t = table(select(MY_SEQ.nextval().as("id"))).as("t");
dsl.insertInto(MY_TABLE)
.columns(MY_TABLE.COL1, MY_TABLE.COL2, MY_TABLE.VAL)
.select(
select(t.field("id"), t.field("id"), val("abc"))
.from(t))
.execute();