12

我有一个非常适合使用 GUID 作为键的 Oracle 项目。我找到了以下片段

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 问题。

4

2 回答 2

17

似乎还可以。从描述:

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

从你的例子:

64FE4083D6B A 7CB4E0400F0A0E0A18B0
64FE4083D6B B 7CB4E0400F0A0E0A18B0
64FE4083D6B C 7CB4E0400F0A0E0A18B0
64FE4083D6B D 7CB4E0400F0A0E0A18B0
64FE4083D6B E 7CB4E0400F0A0E0A18B0

没有人提及这些 GUID 值的分布。它们应该是不重复的,而且确实如此。除非你每次都得到完全相同的输出。

于 2009-03-13T10:22:09.873 回答
17

值确实发生了变化......

           *
64FE4083D6BA7CB4E0400F0A0E0A18B0
64FE4083D6BB7CB4E0400F0A0E0A18B0
64FE4083D6BC7CB4E0400F0A0E0A18B0
64FE4083D6BD7CB4E0400F0A0E0A18B0
64FE4083D6BE7CB4E0400F0A0E0A18B0
           *
于 2009-03-13T10:39:50.393 回答