Oracle SYS_GUID不会更改

Gre*_*lds 12 oracle guid

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

SET SERVEROUTPUT ON
BEGIN
FOR indx IN 1 .. 5
LOOP
DBMS_OUTPUT.put_line ( SYS_GUID );
END LOOP;
END;
/
Run Code Online (Sandbox Code Playgroud)

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

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

64FE4083D6BA7CB4E0400F0A0E0A18B0
64FE4083D6BB7CB4E0400F0A0E0A18B0
64FE4083D6BC7CB4E0400F0A0E0A18B0
64FE4083D6BD7CB4E0400F0A0E0A18B0
64FE4083D6BE7CB4E0400F0A0E0A18B0
Run Code Online (Sandbox Code Playgroud)

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

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

Ano*_*ous 17

似乎没问题.从描述:

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

从你的例子:

64FE4083D6BA7CB4E0400F0A0E0A18B0
64FE4083D6BB7CB4E0400F0A0E0A18B0
64FE4083D6BC7CB4E0400F0A0E0A18B0
64FE4083D6BD7CB4E0400F0A0E0A18B0
64FE4083D6BE7CB4E0400F0A0E0A18B0

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

  • 好眼睛!我认为这就是我发布的想法所讨论的问题。 (2认同)

cag*_*boy 16

价值确实在变化......

           *
64FE4083D6BA7CB4E0400F0A0E0A18B0
64FE4083D6BB7CB4E0400F0A0E0A18B0
64FE4083D6BC7CB4E0400F0A0E0A18B0
64FE4083D6BD7CB4E0400F0A0E0A18B0
64FE4083D6BE7CB4E0400F0A0E0A18B0
           *
Run Code Online (Sandbox Code Playgroud)

  • :-) 我们都去过那里.... 你可以盯着某样东西看一个小时,而不会发现同事在 5 秒内发现的东西。 (2认同)
  • 我来这里的原因完全相同——非常微妙! (2认同)