create sequence s;
create or replace trigger auto_inc
before insert on tab_name
for each row
begin
select s.nextval into :new.n_id from dual;
end;

解决方案 »

  1.   

    Oracle数据库中就有可以自增长的序列Sequence啊,你可以在数据库里新建一个序列,每个序列有两个属性.nextval和.curval,顾名思义,一个是下一个值,一个是当前值,给表的ID字段在新建记录的时候赋初值就可以了。
      

  2.   

    luxuezhu(卢冲),dual 是表名嘛?还是其他的什么???
      

  3.   

    第一句没问题!
    第二句trigger后面的是什么?
      

  4.   

    你先建一个序列 序列名为 seq_test。
    然后就可以直接用下面的触发器了。
    create or replace trigger auto_increase_id
     before insert on test
     for each row
     declare
     next_id number;
     begin
     select seq_test.nextval
     into next_id
     from dual;
     :new.id:=next_id;
     end;
    最后在插入的时候
    例如:insert into tablename (id,name) values(0,'name');
    把插序列的地方写个0就可以了(也可以不写)。免得每次插入是写xxx.nextval这句话太麻烦。
      

  5.   

    dual是系统表,不用改
    只需把tab_name改成你自己的表名。:new.n_id的N_ID改为你表的需要自增的字段
      

  6.   

    表名为TABLE_NAME,序列名为TABLE_NAME_SEQ,建表级触发器:
    create or replace trigger TABLE_NAME_T
      instead of insert or update or delete
      on TABLE_NAME
      for each row
    declare
      ...
    begin
      if inserting then
          insert into TABLE_NAME(ID,NAME,...) 
                           VALUES 
                                (TABLE_NAME_SEQ.NEXTVAL,
                                 :NEW.NAME,
                                 ...);
      elsif updating then
          ...
      elsif deleting then
          ...
      end if;
    exception
      ...
    end TABLE_NAME_T;
    这不就可以了?