大家好,最近碰到一个问题,oracle没有主键自动增长。在网上查资料,只能通过序列和触发器完成,下面是我的一个测试,但是编译一直有错误,请大家指教!
create or replace trigger ddim_pronametest   before insert on ddim_tab_user   for each row   
begin   select ddim_sequence.nextval into:new.id from ddim_tab_user   end;  一直报:ora-04098:触发器无效,且未通过验证

解决方案 »

  1.   

    ddim_sequence.nextval  存在吗?
      

  2.   

    ddim_sequence  这个应该是创建的sequence名称呀  create sequence ddim_sequence
    minvalue 1
    maxvalue 9999999999999
    start with 1
    increment by 1
    nocache;
    执行上面这个 创建好sequence 然后调用ddim_sequence.nextval可以获取下一值
      

  3.   

    oracle主键自增分四个步骤:
    1)建立用户数据表ddim_tab_user;
    2)创建自动增长序列
    create sequence ddim_sequence
    minvalue 1 maxvalue 99999999
    increment by 1
    start with 1;
    3)创建触发器
    create or replace trigger ddim_pronametest
      before insert on ddim_tab_user
      for each row
    begin
      select ddim_sequence.nextval into :new.id from dual;
      end;
    4)提交commit;注意,在创建触发器时,不是从所见表中查询,而是临时表dual
      

  4.   

    #1楼 得分:0回复于:2012-04-28 20:33:49你需要创建一个 sequence 
      

  5.   

    create or replace trigger ddim_pronametest  before insert on ddim_tab_user  for each rowbegin  :new.id:=ddim_sequence.nextval;  end;
      

  6.   

    ...
    1、创建一个sequence 加入名字为seq_user
    2、insert into user(seq_user.nextval , xxx,xx,xx)