在插入纪录之前先select sequence.currval from dual 得到值赋给变量,然后再用该变量插入表。

解决方案 »

  1.   

    select sequence.nextval into col_id from table_name;
      

  2.   

    只要没有其他应用调用select sequence.nextval 就可以。
      

  3.   

    zwztu所说的select sequence.currval from dual好像不对吧?是不是应该select sequence.nextval from dual得到值插入表?
      

  4.   

    如果一直处于当前会话(session)下,只要当前会话没有继续调用seq.nextval,那么seq.currval也一直不会发生变化,即使是其他会话调用了seq.nextval后,本会话的currval也不会变化。
      

  5.   

    楼上说的好像是的,我在网页里做nextval,同时在SQLPlus中做,发现currval不一致。但是我现在的序列调用nextval是在表的触发器里做的,在插入一条记录后与查询序列当前值之前这段时间里,如果有新记录插入,会不会影响我读currval?还是像楼上说的不会发生变化?这种情况下也有session的概念吗?
      

  6.   

    应该是不会影响,因为序列的currval是针对当前会话的,如果新的insert使用nextval是在当前会话中,那就会影响了。如果新的insert是另外的会话,应该是不会。一般来说,一次connect产生一个会话,知道disconnect结束本次会话。