【问题标题】:Get current sequence Id to store in other tables获取当前序列 ID 以存储在其他表中
【发布时间】:2015-07-22 00:18:29
【问题描述】:

我们有多个表,并且都与第一个表的主键相关(例如:id)。 Id 被配置为一个序列,在将数据插入到第一个表时,我们在插入查询中使用sequence.nextval。 现在向其他表插入数据时,如何获取当前序列值或当前Id。

我们尝试了以下选项:

  1. sequence.currval,直接在insert语句中 2.select sequence.currval from dual

以上两个选项在使用getJdbcTemplate().update()时抛出错误。

谁能建议在将数据插入第一个表后如何获取当前序列值以传递给其他表??

【问题讨论】:

  • 如果在插入中使用nextval,则可以在同一会话的后续语句中使用currval。首先使用 currval,如果您建议您在插入测试中这样做,则不会起作用。但是,您在以后的语句中遇到了 currval 的哪些错误?您是否可能对相关语句使用多个会话? (这也可能会给您带来 FK 问题)。显示更多代码和错误可能会提供更多关于您做错了什么的线索。

标签: java oracle sequence spring-jdbc jdbctemplate


【解决方案1】:

如果您想将相同的 id(来自序列)插入到不同的表中,只需从第一个插入中获取它并在其他插入中使用它。

PrepearedStatement stmt1 = conn.prepareStatement("INSERT INTO TABLE1 (id) VALUES(yoursequence.nextval)", Statemet.RETURN_GENERATED_KEYS);
stmt1.executeUpdate();
ResultSet rs = stmt1.getGeneratedKeys();
rs.next();
long id = rs.getLong(1);
PrepearedStatement stmt2 = conn.prepareStatement("INSERT INTO TABLE2 (id) VALUES(?)");
stmt2.setLong(1,id);
stmt2.executeUpdate();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-11
    • 2020-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-29
    • 1970-01-01
    相关资源
    最近更新 更多