Oracle的SYS_GUID() 函数

简介: 大家好呀,我是柚子,这篇文章来介绍下Oracle的SYS_GUID() 函数。~~( ̄︶ ̄*))~

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

一、函数解释

SYS_GUID (),是Oracle 8i 后提供的函数。SYS_GUID产生并返回一个全球唯一的标识符(原始值)由16个字节组成。在大多数平台,生成的标识符由主机标符,执行函数的进程或者线程标识符,和进程或线程的一个非重复的值(字节序列)。它同Oracle管理员所使用的传统的序列(sequence)相比具有诸多优势。一个序列生成器只是简单地创建从给定的起点开始的一系列整数值,而且它被用在选择陈述式的时候自动地递增该系列。


二、查看方式

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():将大写转为小写;

╭◜◝ ͡ ◜◝╮
( ˃̶͈◡˂ ̶͈ )感觉有用的话,欢迎点赞评论呀!
╰◟◞ ͜ ◟◞╯

相关文章
|
2月前
|
SQL Oracle 算法
|
2月前
|
SQL Oracle 关系型数据库
|
2月前
|
SQL Oracle 关系型数据库
Oracle|内置函数之INSTR
【7月更文挑战第5天】
|
2月前
|
Oracle 关系型数据库 数据挖掘
|
4月前
|
SQL Oracle 关系型数据库
JAVAEE框架数据库技术之12_oracle常用函数和高级查询子查询
JAVAEE框架数据库技术之12_oracle常用函数和高级查询子查询
104 0
JAVAEE框架数据库技术之12_oracle常用函数和高级查询子查询
|
2月前
|
Oracle 关系型数据库 数据挖掘
|
4月前
|
存储 Java 数据库
JAVAEE框架数据库技术之13_oracle 之PLSQL技术及存储过程和函数(二)
JAVAEE框架数据库技术之13_oracle 之PLSQL技术及存储过程和函数
71 0
|
3月前
|
存储 Oracle NoSQL
Oracle中decode函数详解
Oracle中decode函数详解
|
3月前
|
Oracle 关系型数据库 大数据
oracle递归函数
oracle递归函数
|
4月前
|
NoSQL Oracle 关系型数据库
MongoDB与Oracle:管道函数兼容之道
【4月更文挑战第20天】
45 2