这篇文章主要介绍了oracle数据库id自增及生成uuid问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
oracle数据库id自增及生成uuid
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的函数以及注意事项
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数据库id自增及生成uuid问题
猜你喜欢
- Oracle 删除大量表记录操作分析总结 2023-07-23
- 在阿里云CentOS 6.8上安装Redis 2023-09-12
- SQL Server 2022 AlwaysOn新特性之包含可用性组详解 2023-07-29
- Numpy中如何创建矩阵并等间隔抽取数据 2023-07-28
- MySQL8.0.28安装教程详细图解(windows 64位) 2023-07-26
- redis清除数据 2023-09-13
- SQLSERVER调用C#的代码实现 2023-07-29
- 基于Python制作一个简单的文章搜索工具 2023-07-28
- 搭建单机Redis缓存服务的实现 2023-07-13
- Mongodb启动报错完美解决方案:about to fork child process,waiting until server is ready for connections. 2023-07-16