oracle数据库id自增及生成uuid问题(oracle自增id怎么设置)新鲜出炉

随心笔谈12个月前发布 admin
97 0



目录oracle数据库id自增及生成uuidoracle中自动生成id的函数以及注意事项总结

oracle数据库中id自增的方法:首先创建一个sequence序列

CREATE SEQUENCE ? xxx_SEQUENCE –创建一个序列
INCREMENT BY 1 –每次增加1
START WITH 1 –开始值为 1
NOMAXvalue –不设置最大值,即最大值
NOCYCLE –不循环
NOCACHE –没有缓存限制

然后给相应要自增的数据库表 添加一个触发器,每次插入前ID自增1.

CREATE OR REPLACE ?TRIGGER xxx_TRIGGER BEFORE –创建一个触发器
insert ON ?xxx FOR EACH ROW –在xxx表开始插入前 每一行?
begin –开始执行
select xxx_SEQUENCE.nextval into:New.ID from dual;–执行插入语句前先给id列插入一个序列的next
end;

这样当插入 insert into xxx () values(”)时,不需要给id列插值,id列会自动生成排序。

插入uuid也类似,给相应表添加触发器即可:

CREATE OR REPLACE TRIGGER QLF_QL_CFDJ_TRIGGER
BEFORE INSERT ON QLF_QL_CFDJ
FOR EACH ROW
DECLARE
BEGIN
? IF :NEW.ID IS NULL THEN
? ? :NEW.ID:=SYS_GUID();
? END IF; END QLF_QL_CFDJ_TRIGGER; –最后一个end 最好和第二个end放在一行,不然有可能报错

oracle中自动生成id的函数 :sys_guid()

SELECT sys_guid() FROM aTable a ;

注意:上面这个是可以自动生成id,但是很多时候自动生成的id会出现乱码

原因:SYS_GUID 以16位RAW类型值形式返回一个全局唯一的标识符,而我们一般用的是十六进制的字符

所有用以下的解决方式:

— 用大写或者小写函数都能解决 : 因为大小写会把raw串自动转换为十六进制
select lower(sys_guid()) from aTable a;
— 或者?
select upper(sys_guid()) from aTable a;
— 个人推荐这种:因为它不把值转换成大小写
— rawtohex函数: 将raw串转换为十六进制
select rawtohex(sys_guid()) from aTable a;
— 还有
select lower(rawtohex(sys_guid())) from aTable a;

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:Oracle生成随机数字、字符串、日期、验证码及 UUID的方法Oracle中游标Cursor的用法详解

© 版权声明

相关文章