ORACLE procedure 生成uuid主键

前端之家收集整理的这篇文章主要介绍了ORACLE procedure 生成uuid主键前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

#项目背景:

Java Web项目,持久层使用mybatis,没有配置主键生成策略,直接在java中生成类似uuid的36随意字符串(比uuid多了几个中横线)。

#问题 在存储过程中,需要插入数据,开始使用 sequence生成自增主键,这样与uuid的主键永远(一万年?)也不会存在冲突。最开始还特意因为开发数据的问题,让sequence从100开始生成,每次递增1。在项目快要上线的时候,从客户那里导了一些数据,用来做数据迁移脚本,在迁移脚本中,使用了旧的主键,大概看了一部分,基本都是一万以内的数字。当然就跟sequence生成的值冲突了。 #解决 最开始在写存储过程的时候,想歪了,想去给表配置主键自增,这个想法是没错的,可是字符串类型的主键怎么自增(鄙视自己),当然,这是不可靠的。 后来就用sequence了,本来是没问题的,问题出在历史数据中,应该放弃旧的主键字段,重新创建主键的。 还是自己比较傻,没想到去找oracle取uuid的方法,也就一句

select sys_guid() from dual;

比建个sequence,在取值还要方便点,直接就可以用。

注:建sequence ##建sequence

CREATE SEQUENCE seqTest
INCREMENT BY 1 -- 每次加几个
START WITH 1 -- 从1开始计数
NOMAXvalue -- 不设置最大值
NOCYCLE -- 一直累加,不循环
CACHE 10; --设置缓存cache个序列,如果系统down掉了或者其它情况将会导致序列不连续,也可以设置为---------NOCACHE

##取值

select sequenct_name.NEXTVAL  from dual;
select sequenct_name.CURRVAL   from dual;

##删除sequence

drop sequence sequence_name;
原文链接:https://www.f2er.com/oracle/212181.html

猜你在找的Oracle相关文章