帮忙写一个oracle的id生成器!
没思路!所以请各位大神帮小弟写一个。
我重启程序后它生成的id应该不会冲突吧!
------解决方案--------------------oracle 数据库没有像 MYSQL一样有 自动ID增值 的功能,如要实现可以用触发器。
首先就是建立一个序列,序列有有自动增值的功能,再建立一个触发器。
如:
建立一个序列
CREATE SEQUENCE auto_seq
minvalue 1 -- 最小值
increment by 1 -- 每次增加值数
nocache -- 不启用缓存
nocycle -- 不循环;
建立一个触发器
CREATE OR REPLACE trigger auto_id_tri
before insert on pjsh_person -- before 表示插入新数据时执行
for each row -- 每次插入数据到pjsh_person表时执行下面的oracle 语句
begin
select auto_seq.nextval into :NEW.ID from dual;
end;
auto_id_tri 触发器名
auto_seq.nextval 提取auto_seq 序列的值
:NEW.ID ID为要添加的主键列名
pjsh_person 要添加自动ID值的表名。
------解决方案--------------------....貌似我以前还写过类似的专利..
你可以自己用一个表来维护类似oracle序列的字段
新建序列表SEQUENCE
CREATE TABLE `SEQUENCE` (
`name` varchar(45) NOT NULL COMMENT '
业务表名称(数据库_表名)',
`value` bigint(20) NOT NULL COMMENT '
业务表对应的主键id',
`increment` int(11) DEFAULT '1' COMMENT '
序列的步长,默认1,如果出现负值则表示序列按此步长递减',
`start` bigint(20) DEFAULT '1' COMMENT '
用于定义序列的初始值,默认1',
PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='序列表'
然后写一个工具类来维护和获取自增序列
或者自己写存储过程维护序列
------解决方案--------------------ORACLE上没有自增字段,可以使用索引和触发器来达到此目的
第一步:创建SEQUENCE
CREATE SEQUENCE S_COUNTRY_ID INCREMENT BY 1 START WITH 1 MAXVALUE 999999999;
第二步:插入
SQL> INSERT INTO TTT VALUES (S_COUNTRY_ID.NEXTVAL,'DDD');
或者创建一个基于该表的BEFORE INSERT 触发器,在触发器中使用该SEQUENCE
create or replace trigger TRG_TEST before insert on 表名 for each ROW
BEGIN
SELECT S_COUNTRY_ID.NEXTVAL INTO :NEW.U_ID FROM DUAL;
END;
------解决方案--------------------查查create SEQUENCE的用法吧。。。
全库共享的自增id