create sequence seq_id
    minvalue 1 
    start with 1 
   increment by 1 
   nocache;
 
-- 假设ID 为自增长字段
CREATE or replace trigger  trg_insert_id
before insert on tablename 
for each row 
   
BEGIN 
    select seq_ID.nextval into :new.ID from dual;
END;
/

解决方案 »

  1.   

    使用存储过程:
        1)删除SEQUENCE
        2)重建
      

  2.   

    alter  sequence <name>  start with 1 ;
      

  3.   

    alter  sequence <name>  start with 1 ;
    ----------------------------------------------
    无法重置序号的初始值
      

  4.   

    alter  sequence <name>  start with 1 ;
    必须是8i以上的版本才支持。
    否则只能重新建立。
      

  5.   

    alter  sequence <name>  start with 1 ;
    必须是8i以上的版本才支持。
    否则只能重新建立。
    -------------------------------------------我用的是816,难道必须要9i,10g才可以么?
      

  6.   

    SQL> alter  sequence ab start with 1 ;
    alter  sequence ab start with 1
                       *
    ERROR 位于第 1 行:
    ORA-02283: 无法改变起始序号
    SQL>我的是oracle8.1.7好象也不成的~
      

  7.   

    别的我不太清楚,不过Oracle817和Oracle901的ALTER SEQUENCE的功能是改变递增值,最大值,最小值和缓存数另外Oracle817和Oracle901的ALTER SEQUENCE也没有START WITH子句,CREATE SEQUENCE有START WITH子句。希望以上两条可以为你带来一些提示吧。
      

  8.   

    一种方法是重建。另一种方法是改变increment.
    可以先select一下nextval,假如为888888,现在要重置为1,假设你原来的increment也是1。
    alter sequence seq_name increment by -888887;
    然后select seq_name.nextval from dual;
    就把currval重置为1了。
    这种方法的前提是在操作时不能有其他人在引用该序列。
      

  9.   

    完了之后应该把increment改回去。