文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

oracle数据库id自增及生成uuid问题

2023-05-05 05:47

关注

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;

总结

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

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯