先建序列,再在表上做个触发器,在触发器里:new.ID := 序列.nextval;

解决方案 »

  1.   

    SQL> create table t1
      2  (
      3    id   number,
      4    name varchar2(10)
      5  )
      6  ;Table createdSQL> 
    SQL> create sequence T1ID_SEQ
      2  minvalue 1
      3  maxvalue 999999
      4  start with 1
      5  increment by 1
      6  cache 20
      7  ;Sequence created
    SQL> create or replace trigger t1id_tr
      2  before insert on t1 for each row
      3  
      4  
      5  begin
      6    select to_char(T1ID_SEQ.nextval) into :new.id from dual;
      7  end t1id_tr;
      8  /Trigger createdSQL> insert into t1(name) values('n1');1 row insertedSQL> commit;Commit completeSQL> select * from t1;        ID NAME
    ---------- ----------
             1 n1SQL> insert into t1(name) values('n2');1 row insertedSQL> commit;Commit completeSQL> select * from t1;        ID NAME
    ---------- ----------
             1 n1
             2 n2SQL>
      

  2.   

    SQL> reate or replace trigger t1id_tr
    SP2-0734: 未知的命令开头 "reate or r..." - 忽略了剩余的行。
    SQL>    before insert on t1 for each row
    SP2-0734: 未知的命令开头 "before ins..." - 忽略了剩余的行。
    SQL>    
    SQL>   
    SQL>    begin
      2       select to_char(T1ID_SEQ.nextval) into :new.id from dual;
      3    end t1id_tr;/
      4  /
    SP2-0552: 未说明结合变量"NEW"
    /////////////////////////////
    SQL> create or replace trigger t1id_tr
      2  before insert on t1 for each row
      3  
      4  
      5  begin
      6    select to_char(T1ID_SEQ.nextval) into :new.id from dual;
      7  end t1id_tr;
      8  /
    我用这个跑不通啊,得到的是最上面的那个结果。
      

  3.   

    创建sequence:
    CREATE SEQUENCE SEQ_AAAID
    INCREMENT BY 1
    MAXVALUE 999999999
    MINVALUE 1
    NOCYCLE
    NOORDER创建触发器:
    CREATE OR REPLACE TRIGGER TR_AAA_ID
      BEFORE INSERT
      ON tablename
      FOR EACH ROWDECLARE
      V_ID NUMBER;
    BEGIN
      SELECT SEQ_AAAID.NEXTVAL INTO V_ID FROM DUAL;
      :NEW.ID(对应需自动增长字段名) := V_ID;END TR_AAA_ID;这样就行!