Oracle的SYS_GUID()函数用法及说明

 更新时间:2023年07月29日 15:27:57   作者:柚子猫屿  
这篇文章主要介绍了Oracle的SYS_GUID()函数用法及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

前言

今天在代码中发现了Oracle的SYS_GUID() 函数作为主键的用法,于是来记录下~

提示:以下是本篇文章正文内容,下面案例可供参考

一、函数解释

SYS_GUID (),是Oracle 8i 后提供的函数。

SYS_GUID产生并返回一个全球唯一的标识符(原始值)由16个字节组成。

在大多数平台,生成的标识符由主机标符,执行函数的进程或者线程标识符,和进程或线程的一个非重复的值(字节序列)。

二、查看方式

select sys_guid() from dual;

返回:长度为32位的字符串,包括0-9和大写A-F。

但是你会发现此时查出的是乱码,那该怎么办呢?

乱码

乱码就要使用rawtohex()函数方法啦~

select rawtohex(sys_guid()) from dual;

正常

呐!现在就展示正常了。

三、使用场景

1.建表时作为主键

如下(示例):

create table student
(
student_id raw(16) default sys_guid() primary key,
student_name varchar2(100) not null
);

2.新增数据时填充主键

如下(示例):

insert into student(student_id, student_name)
values (SYS_GUID(), '小明');

四、SYS_GUID作为主键的优缺点

1.优点

(1)序列从起点开始进行自增,但只能保持在单个实例里唯一。

因此不适合用作并行或远程环境的主键,因为各自环境里的序列可能会生成相同的数字,从而导致冲突的发生。

而SYS_GUID会保证它创建的标识符在每个数据库里都是唯一的。

(2)序列必须是DML陈述式的一部分,因此它需要一个到数据库的往返过程(否则它就不能保证其值是唯一的)。

SYS_GUID不需要对数据库进行访问的时间戳和机器标识符,这就节省了查询的消耗。

2.缺点

(1)从空间上,相同条件下,使用SYS_GUID做主键比用Sequence做主键,表多消耗了空间。

(2)用SYS_GUID使用时相对不太方便,必须(手动)输入或者通过脚本来填充相应的字段。

总结

总的来说,还是利大于弊啦~

  • hextoraw():十六进制字符串转换为raw;
  • rawtohex():将raw串转换为十六进制;
  • lower():将大写转为小写;

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

相关文章

  • Oracle中部分不兼容对象迁移到OceanBase的三种处理方式

    Oracle中部分不兼容对象迁移到OceanBase的三种处理方式

    本文总结分析了 3 种 Oracle 对象和 OB 对象不兼容时的处理方法和提前统计发现的操作方式,在迁移前提前发现这类问题能有效避免在迁移过程中报错的问题,需要的朋友可以参考下
    2024-03-03
  • 查看oracle数据库的编码及修改编码格式的方法

    查看oracle数据库的编码及修改编码格式的方法

    本节主要介绍了如何查看oracle数据库的编码及修改编码格式,需要的朋友可以参考下
    2014-07-07
  • oracle保留两位小数解决方案

    oracle保留两位小数解决方案

    公司需要处理一些报表,需要使用百分率,保留2位小数,只用round和trunc函数都可以实现(round(_data,2) ),只是格式不是很工整,对格式要求不严谨的情况下使用round即可
    2012-11-11
  • 如何把Oracle 数据库从 RAC 集群迁移到单机环境

    如何把Oracle 数据库从 RAC 集群迁移到单机环境

    这篇文章主要介绍了把 Oracle 数据库从 RAC 集群迁移到单机环境,内容包括系统环境搭建,源数据库的操作及目标数据库的操作,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • Oracle数据泵EXPDP/IMPDP导出导入功能详细深入解析

    Oracle数据泵EXPDP/IMPDP导出导入功能详细深入解析

    这篇文章主要给大家介绍了关于Oracle数据泵EXPDP/IMPDP导出导入功能的相关资料,数据泵导出/导入属于逻辑备份,热备份与冷备份都属于物理备份,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-12-12
  • Oracle 11g中密码过期问题详解

    Oracle 11g中密码过期问题详解

    本文主要是对Oracle中产生密码过期的2种情况进行了详细分析,并给出了解决方案,非常的简单实用,有需要的朋友可以参考下
    2014-09-09
  • Oracle数据库表空间超详细介绍

    Oracle数据库表空间超详细介绍

    Oracle数据库的数据存放在表空间中,表空间是一个逻辑的概念,它是由数据文件组成,表空间大小由数据文件的数量和大小决定,下面这篇文章主要给大家介绍了关于Oracle数据库表空间的相关资料,需要的朋友可以参考下
    2023-05-05
  • Oracle的PDB数据库创建DIRECTORY时遇到ORA-65254问题及解决方法

    Oracle的PDB数据库创建DIRECTORY时遇到ORA-65254问题及解决方法

    这篇文章主要介绍了Oracle的PDB数据库创建DIRECTORY时遇到ORA-65254问题,本文给大家分享完美解决方案,需要的朋友可以参考下
    2023-06-06
  • oracle AWR性能监控报告生成方法

    oracle AWR性能监控报告生成方法

    这篇文章主要为大家详细介绍了oracle AWR性能监控报告的生成方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • Oracle中sequence(序列)使用方法详解

    Oracle中sequence(序列)使用方法详解

    在oracle中sequence就是序号,每次取的时候它会自动增加,下面这篇文章主要给大家介绍了关于Oracle中sequence(序列)使用方法的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-03-03

最新评论