是不是在别的地方执行过
select sq_name.nextval from dual

使用触发器也可以解决

解决方案 »

  1.   

    alter sequence seq_name increment by 1;
    select seq_name.nextval from dual;
      

  2.   

    序列每调用一次nextval 的值,自动加一,不管是得到的值是否生效。
    如果将最大值保存在一个地方或在库中搜索最大值,则可能会造成重复(多用户操作的情况)。
    用触发器是一个好办法,但同样不能保证肯定的连续和不重复,因为触发器的数据的提交是随用户的提交而提交的。
    如果你一定要保存成连续的数值,除非你取消ROLLBACK的操作,而且每次操作都必须成功。
    另外可以在保证只有一个人操作的情况下,用保存最大值的方法实现。我想问问贴主:
      为什么一定要连续的值呢,有意义吗?  另外,即便生成了连续的序号,你就不做删除操作吗?只要已删除,不就又不连续了。  不是我打击你,说实话,保证序号不重,很容易实现,但要保证一定连续,而且不重,就很难了。如果在多用户操作的模式下,好象根本就不能实现,除非取消ROLLBACK操作功能。
      

  3.   

    不需要要采用序列呀
       SELECT MAX(列名)+1 INTO :aa from table;
       这样就可以得到连续的序号了
      

  4.   

    CREATE SEQUENCE GHNO INCREMENT BY 1 START WITH 1 
        MAXVALUE 1.0E28 MINVALUE 1 CYCLE 
        NOCACHE NOORDER;
     
    注意设置nocache.
    若多处地方调用,那有可能不连续,或者有删除记录也会造成。
    为什么要考虑连续问题,只是系统需要就不必考虑.
      

  5.   

    如果采用MAX的话,可以在取得最大值后,立即COMMIT,就可最大化避免多用户重复的问题,但愿你的用户不会超过50个。我和楼上的态度一样,为什么一定要连续啊,流水号的主要目的是不重复,其它的都不重要。尤其当流水号还要参与更新删除操作的时候。不要舍本求末,还是以实现主要目的为主,不要考虑的太花哨了
      

  6.   

    就是我们单位哪些不懂的人硬要我做的,唉,不懂的指挥懂的,谢谢多位关心。我会设NOCHCHE的谢谢。