Oracle的SYS_GUID()函數(shù)用法及說明
前言
今天在代碼中發(fā)現(xiàn)了Oracle的SYS_GUID() 函數(shù)作為主鍵的用法,于是來記錄下~
提示:以下是本篇文章正文內(nèi)容,下面案例可供參考
一、函數(shù)解釋
SYS_GUID (),是Oracle 8i 后提供的函數(shù)。
SYS_GUID產(chǎn)生并返回一個(gè)全球唯一的標(biāo)識(shí)符(原始值)由16個(gè)字節(jié)組成。
在大多數(shù)平臺(tái),生成的標(biāo)識(shí)符由主機(jī)標(biāo)符,執(zhí)行函數(shù)的進(jìn)程或者線程標(biāo)識(shí)符,和進(jìn)程或線程的一個(gè)非重復(fù)的值(字節(jié)序列)。
二、查看方式
select sys_guid() from dual;
返回:長度為32位的字符串,包括0-9和大寫A-F。
但是你會(huì)發(fā)現(xiàn)此時(shí)查出的是亂碼,那該怎么辦呢?

亂碼就要使用rawtohex()函數(shù)方法啦~
select rawtohex(sys_guid()) from dual;

吶!現(xiàn)在就展示正常了。
三、使用場(chǎng)景
1.建表時(shí)作為主鍵
如下(示例):
create table student ( student_id raw(16) default sys_guid() primary key, student_name varchar2(100) not null );
2.新增數(shù)據(jù)時(shí)填充主鍵
如下(示例):
insert into student(student_id, student_name) values (SYS_GUID(), '小明');
四、SYS_GUID作為主鍵的優(yōu)缺點(diǎn)
1.優(yōu)點(diǎn)
(1)序列從起點(diǎn)開始進(jìn)行自增,但只能保持在單個(gè)實(shí)例里唯一。
因此不適合用作并行或遠(yuǎn)程環(huán)境的主鍵,因?yàn)楦髯原h(huán)境里的序列可能會(huì)生成相同的數(shù)字,從而導(dǎo)致沖突的發(fā)生。
而SYS_GUID會(huì)保證它創(chuàng)建的標(biāo)識(shí)符在每個(gè)數(shù)據(jù)庫里都是唯一的。
(2)序列必須是DML陳述式的一部分,因此它需要一個(gè)到數(shù)據(jù)庫的往返過程(否則它就不能保證其值是唯一的)。
SYS_GUID不需要對(duì)數(shù)據(jù)庫進(jìn)行訪問的時(shí)間戳和機(jī)器標(biāo)識(shí)符,這就節(jié)省了查詢的消耗。
2.缺點(diǎn)
(1)從空間上,相同條件下,使用SYS_GUID做主鍵比用Sequence做主鍵,表多消耗了空間。
(2)用SYS_GUID使用時(shí)相對(duì)不太方便,必須(手動(dòng))輸入或者通過腳本來填充相應(yīng)的字段。
總結(jié)
總的來說,還是利大于弊啦~
hextoraw():十六進(jìn)制字符串轉(zhuǎn)換為raw;rawtohex():將raw串轉(zhuǎn)換為十六進(jìn)制;lower():將大寫轉(zhuǎn)為小寫;
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Oracle如何清除一個(gè)用戶下的所有表(謹(jǐn)慎操作!)
在測(cè)試數(shù)據(jù)庫腳本可用性的時(shí)候,會(huì)新建一個(gè)用戶然后執(zhí)行腳本,測(cè)試成功之后,需要清空表,下面這篇文章主要給大家介紹了關(guān)于Oracle如何清除一個(gè)用戶下的所有表的相關(guān)資料,需要的朋友可以參考下2023-03-03
oracle ORA-00031:session marked for kill(標(biāo)記要終止的會(huì)話)解決方法
這篇文章主要介紹了oracle ORA-00031:session marked for kill(標(biāo)記要終止的會(huì)話)解決方法 ,需要的朋友可以參考下2015-12-12
Windows10系統(tǒng)中Oracle完全卸載正確步驟
自己剛到公司就是熟悉數(shù)據(jù)庫的安裝卸載,所以分享一下學(xué)到的,下面這篇文章主要給大家介紹了關(guān)于Windows10系統(tǒng)中Oracle完全卸載正確步驟的相關(guān)資料,文章通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-04-04
Oracle查詢當(dāng)前的crs/has自啟動(dòng)狀態(tài)實(shí)例教程
當(dāng)我們開啟或者關(guān)閉自啟動(dòng)后,我們?nèi)绾尾榭串?dāng)前CRS 是處于enable還是處于disable中呢?下面這篇文章主要給大家介紹了關(guān)于Oracle如何查詢當(dāng)前的crs/has自啟動(dòng)狀態(tài)的相關(guān)資料,需要的朋友可以參考下2018-11-11
Oracle固定執(zhí)行計(jì)劃之SQL PROFILE概要文件詳解
概要文件,就是一份描述如何使用系統(tǒng)的資源(主要是CPU資源)的配置文件,這篇文章主要介紹了Oracle固定執(zhí)行計(jì)劃之SQL PROFILE概要文件 ,需要的朋友可以參考下2018-10-10
處理Oracle監(jiān)聽程序當(dāng)前無法識(shí)別連接描述符中請(qǐng)求的服務(wù)異常(ORA-12514)
這篇文章介紹了處理Oracle監(jiān)聽程序當(dāng)前無法識(shí)別連接描述符中請(qǐng)求的服務(wù)異常(ORA-12514),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-12-12
Oracle 數(shù)據(jù)庫特殊查詢總結(jié)
這篇文章主要介紹了Oracle 數(shù)據(jù)庫特殊查詢總結(jié)的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-08-08
Win7 64位下PowerDesigner連接64位Oracle11g數(shù)據(jù)庫
這篇文章主要為大家詳細(xì)介紹了Win7 64位下PowerDesigner連接64位Oracle11g數(shù)據(jù)庫,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08
oracle聯(lián)機(jī)數(shù)據(jù)庫備份詳解
oracle數(shù)據(jù)庫維護(hù)中,備份或恢復(fù)是重中之重的問題,本文就講一下oracle聯(lián)機(jī)數(shù)據(jù)庫備份的方法2013-11-11

