Oracle SYS_GUID不会更改

时间:2009-03-13 10:14:55

标签: oracle guid

我有一个Oracle项目,非常适合使用GUID作为密钥。我找到了以下代码段

SET SERVEROUTPUT ON
BEGIN
FOR indx IN 1 .. 5
LOOP
DBMS_OUTPUT.put_line ( SYS_GUID );
END LOOP;
END;
/

来自http://feuerthoughts.blogspot.com/2006/02/watch-out-for-sequential-oracle-guids.html

当我针对我的数据库运行它(我在版本10g和版本11上运行它)时,我得到输出

64FE4083D6BA7CB4E0400F0A0E0A18B0
64FE4083D6BB7CB4E0400F0A0E0A18B0
64FE4083D6BC7CB4E0400F0A0E0A18B0
64FE4083D6BD7CB4E0400F0A0E0A18B0
64FE4083D6BE7CB4E0400F0A0E0A18B0

即。价值永远不会改变!有什么我必须做的事情来设置它按预期工作吗?

编辑:我不是很观察 - GUID正在改变,但看起来我正在遭受上面链接所讨论的顺序GUID问题。

2 个答案:

答案 0 :(得分:17)

似乎没问题。从描述:

  

SYS_GUID生成并返回一个   全局唯一标识符(RAW值)   由16个字节组成。最多的   平台,生成的标识符   由主机标识符组成,a   进程或线程标识符   进程或线程调用   函数和非重复值   该进程的(字节序列)   或者线程。

从你的例子:

64FE4083D6BA7CB4E0400F0A0E0A18B0
64FE4083D6BB7CB4E0400F0A0E0A18B0
64FE4083D6BC7CB4E0400F0A0E0A18B0
64FE4083D6BD7CB4E0400F0A0E0A18B0
64FE4083D6BE7CB4E0400F0A0E0A18B0

没有人提到有关这些GUID值的分布的任何内容。他们应该是非重复的,他们是。除非你每次都得到完全相同的输出。

答案 1 :(得分:16)

价值确实改变了......

           *
64FE4083D6BA7CB4E0400F0A0E0A18B0
64FE4083D6BB7CB4E0400F0A0E0A18B0
64FE4083D6BC7CB4E0400F0A0E0A18B0
64FE4083D6BD7CB4E0400F0A0E0A18B0
64FE4083D6BE7CB4E0400F0A0E0A18B0
           *