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

 更新时间:2023年05月04日 14:31:49   作者:nihao561  
这篇文章主要介绍了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;

总结

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

相关文章

  • 云服务器centos8安装oracle19c的详细教程

    云服务器centos8安装oracle19c的详细教程

    这篇文章主要介绍了云服务器centos8安装oracle19c的详细教程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • 安装Oracle完整客户端后没有访问接口OraOLEDB.Oracle解决办法

    安装Oracle完整客户端后没有访问接口OraOLEDB.Oracle解决办法

    这篇文章主要给大家介绍了关于安装Oracle完整客户端后没有访问接口OraOLEDB.Oracle的解决办法,文中通过代码介绍的非常详细,对大家的学习或者工作具有一定的参考解决价值,需要的朋友可以参考下
    2024-01-01
  • Oracle数据库中ora-12899错误的解决方法

    Oracle数据库中ora-12899错误的解决方法

    大家在使用oracle数据库时,经常会遇到各种各样的问题,其中ORA-12899就是前段时间我在将数据导入到我本地机器上的时候一直出现的问题.经过一番倒腾问题顺利解决,下面小编把实现思路分享到脚本之家平台大家可以参考下
    2017-11-11
  • Oracle ORA 07445 evaopn2()+128错误问题的解决方案

    Oracle ORA 07445 evaopn2()+128错误问题的解决方案

    这篇文章主要介绍了Oracle ORA 07445 evaopn2()+128错误问题的解决方案,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-09-09
  • oracle使用instr或like方法判断是否包含字符串

    oracle使用instr或like方法判断是否包含字符串

    使用contains谓词有个条件,那就是列要建立索引,本节主要介绍了oracle使用instr或like方法判断是否包含字符串,需要的朋友可以参考下
    2014-08-08
  • Oracle实现行转换成列的方法

    Oracle实现行转换成列的方法

    这篇文章主要介绍了Oracle实现行转换成列的方法,实例分析了Oracle创建及查询表的相关操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2016-12-12
  • Oracle中BLOB、CLOB的读取和写入方式

    Oracle中BLOB、CLOB的读取和写入方式

    Oracle数据库中,大类型字段(LOB)用于存储大量数据,包括文本、图像、视频等,主要类型有CLOB、BLOB、NCLOB和BFILE,CLOB用于存储大段文本,BLOB用于存储二进制数据,NCLOB适用于多国语言文本,而BFILE存储外部文件的引用
    2024-10-10
  • Oracle删除表及查看表空间的实例详解

    Oracle删除表及查看表空间的实例详解

    这篇文章主要介绍了Oracle删除表及查看表空间的实例详解,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-03-03
  • Oracle表结构查询之如何获取列信息与注释

    Oracle表结构查询之如何获取列信息与注释

    本文主要介绍了Oracle数据库中表结构信息的基本知识,包括表名、列名、数据类型、数据长度、可空性、默认值以及字段注释等,这些信息对于理解数据库设计和维护非常重要,同时,提供了基本的查询示例
    2024-10-10
  • Oracle中查看正在运行的SQL进程脚本分享

    Oracle中查看正在运行的SQL进程脚本分享

    这篇文章主要介绍了Oracle中查看正在运行的SQL进程脚本分享,本文使用脚本实现了类似mysql show processlist命令的功能,需要的朋友可以参考下
    2014-10-10

最新评论