我只是想查询一下,下一个自动增长的值是什么用了这个sql语句
select seq_id.nextVal from dual数据的确读取出来了。可是
在我插入的时候
insert into bug (seq_id, bug_ip, pc_id, desc_cont, bug_date, bug_state)
values (seq_id.NEXTVAL, #bug_ip#, #pc_id#, #desc_cont#, sysdate, 'N')
发现不是原先插入的那个序列了,是那个序列又加一了。
例如这个select seq_id.nextVal from dual得到200可是插入的时候 insert into bug (seq_id, bug_ip, pc_id, desc_cont, bug_date, bug_state)
values (seq_id.NEXTVAL, #bug_ip#, #pc_id#, #desc_cont#, sysdate, 'N')
得到的201怎么修改查询的和插入的相等

解决方案 »

  1.   

    select seq_id.CURRVAL from dual 
    select seq_id.nextVal 就是取下一个值了 ,和insert一样
      

  2.   

    每次调用seq_id.NEXTVAL都会使序列发生改变,因此你想先查询再插入,只能调用一次.NEXTVAL,可以先调用.NEXTVAL,将值保存在一个变量中,此后插入时用那个变量,或者是查询是用.NEXTVAL,插入时用.CURRVAL。
      

  3.   

    但需要注意的是.CURRVAL与会话有关,它是取本会话此序列最后一次.NEXTVAL的值。如果你的应用使用了连接池,而你无法保证每次执行的SQL是用的同一个数据库连接,那么就不能在SQL中直接使用.CURRVAL
      

  4.   

    1、select seq_id.nextVal into value,然后insert的时候插入这个变量
    2、不用select直接调用insert就不会出现你说的现象
      

  5.   

    insert into bug (seq_id, bug_ip, pc_id, desc_cont, bug_date, bug_state) 
    values (seq_id.NEXTVAL, #bug_ip#, #pc_id#, #desc_cont#, sysdate, 'N') 
    直接写,不然等于你取下一个序列取了2次