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; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |