日期:2014-05-17  浏览次数:20767 次

oracle中的ID号如何实现自增长
RT  (最好给个例子)
------最佳解决方案--------------------
使用sequence

--创建sequence
CREATE SEQUENCE emp_sequence  
    INCREMENT BY 1  -- 每次加几个  
    START WITH 1    -- 从1开始计数  
    NOMAXVALUE      -- 不设置最大值  
    NOCYCLE         -- 一直累加,不循环  
    CACHE 10;  

一旦定义了emp_sequence,你就可以用CURRVAL,NEXTVAL  
 CURRVAL=返回 sequence的当前值  
 NEXTVAL=增加sequence的值,然后返回 sequence 值

INSERT INTO emp VALUES   
(empseq.nextval, 'LEWIS', 'CLERK',7902, SYSDATE, 1200, NULL, 20);  

SELECT empseq.currval     FROM DUAL;  
------其他解决方案--------------------
1:SEQUENCE
2:触发器实现,参考我的博客:
http://blog.csdn.net/java3344520/archive/2009/11/30/4907591.aspx
------其他解决方案--------------------
1:SEQUENCE(手动调用,先初始化)
     
2:触发器实现(其实就是使用序列)
------其他解决方案--------------------
哦,这个啊,网上一搜一大把。呵呵,看看小弟的文章吧。http://hi.baidu.com/%B3%F3%C5%AEyuyu/blog/item/1761ea55bcc89d153b293544.html原来用的时候,转自csdn的。
------其他解决方案--------------------
总结一下,oracle实现自增长的途径:
1、使用sequence;
  创建:create sequence id_seq start with 1 increment by 1;
  引用:select id_seq.nextval from dual;
  在该表上可以创建一个触发器来引用,并自动插入相应的表
2、使用自建表加select * from update来维护,如果每天都序列号都要复位,可以用这种方式来实现。
  建一张保存序列号的表,如tabseq(id number),并插入初始值0;
  使用锁定来实现串行:select * from tabseq for update;
  取得当前表的id值加1,作为下一个id返回
  更新回表并提交。如果要实现每天复位,可以增加一个日期字段,然后和当前日期进行比较决定是否复位。

------其他解决方案--------------------
使用序列来实现自动增长,不过需要自己取值sq.nextval来实现。
------其他解决方案--------------------
  
   序列+触发器实现。

创建SEQUENCE   
  create   sequence   s_country_id   increment   by   1   start   with   1   maxvalue   999999999;   

  创建一个基于该表的before   insert   触发器,在触发器中使用该SEQUENCE   
  create   or   replace   trigger   bef_ins_t_country_define   
  before   insert   on   t_country_define   
  referencing   old   as   old   new   as   new   for   each   row   
  begin   
  new.country_id=s_country_id.nextval;   
  end;   

------其他解决方案--------------------
触发器:
create or replace

  TRIGGER Test_Trr