我想知道Oracle的SYS_GUID()函数是否返回符合RFC 4122的UUID.例如:
SQL> select sys_guid() from dual;
SYS_GUID()
--------------------------------
A6C1BD5167C366C6E04400144FD25BA0
Run Code Online (Sandbox Code Playgroud)
我知道,SYS_GUID()返回一个16字节的RAW数据类型.Oracle使用RAWTOHEX()和可能TO_CHAR()打印出上面的ID.将其解释为符合UUID的字符串格式是否正确:
A6C1BD51-67C3-66C6-E044-00144FD25BA0
Run Code Online (Sandbox Code Playgroud)
我认为它不符合RFC 4122标准,因为定义说,有效的UUID必须在UUID本身内命名UUID-Version.
符合RFC 4122的UUID(版本3)的语法:
xxxxxxxx-xxxx-3xxx-xxxx-xxxxxxxxxxxx
Run Code Online (Sandbox Code Playgroud)
sco*_*udy 22
如果你想要这种格式,试试这个:
select regexp_replace(rawtohex(sys_guid())
, '([A-F0-9]{8})([A-F0-9]{4})([A-F0-9]{4})([A-F0-9]{4})([A-F0-9]{12})'
, '\1-\2-\3-\4-\5')
as FORMATTED_GUID
from dual
Run Code Online (Sandbox Code Playgroud)
示例结果:
FORMATTED_GUID
------------------------------------
F680233E-0FDD-00C4-E043-0A4059C654C9
Run Code Online (Sandbox Code Playgroud)
APC*_*APC 19
SYS_GUID是Oracle的UUID 等价物.它是全球独一无二的.但是,它不符合RFC 4122; 由于文档中没有对UUID的引用(Java XML文档之外),我推断缺乏合规性.
我怀疑Oracle没有本身实现RFC 4122,因为他们认为它不会扩展.我无法想象为什么他们会发明自己的东西而不是遵守标准.
| 归档时间: |
|
| 查看次数: |
15717 次 |
| 最近记录: |