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