加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ORACLE procedure 生成uuid主键

发布时间:2020-12-12 15:50:57 所属栏目:百科 来源:网络整理
导读:#项目背景: Java Web项目,持久层使用mybatis,没有配置主键生成策略,直接在java中生成类似uuid的36随意字符串(比uuid多了几个中横线)。 #问题 在存储过程中,需要插入数据,开始使用 sequence生成自增主键,这样与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;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读