Oracle的SYS_GUID()UUID RFC 4122是否兼容?

nul*_*ice 24 oracle uuid rfc

我想知道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)

  • 通过避免REGEXP进行批量数据处理以获得更好的性能,请参见[此处](http://stackoverflow.com/questions/36354555/formating-string-without-regexp-replace-and-pl-sql) (2认同)

APC*_*APC 19

SYS_GUID是Oracle的UUID 等价物.它是全球独一无二的.但是,它不符合RFC 4122; 由于文档中没有对UUID的引用(Java XML文档之外),我推断缺乏合规性.

我怀疑Oracle没有本身实现RFC 4122,因为他们认为它不会扩展.我无法想象为什么他们会发明自己的东西而不是遵守标准.