我有一个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问题。
答案 0 :(得分:17)
似乎没问题。从描述:
SYS_GUID生成并返回一个 全局唯一标识符(RAW值) 由16个字节组成。最多的 平台,生成的标识符 由主机标识符组成,a 进程或线程标识符 进程或线程调用 函数和非重复值 该进程的(字节序列) 或者线程。
从你的例子:
64FE4083D6BA7CB4E0400F0A0E0A18B0 64FE4083D6BB7CB4E0400F0A0E0A18B0 64FE4083D6BC7CB4E0400F0A0E0A18B0 64FE4083D6BD7CB4E0400F0A0E0A18B0 64FE4083D6BE7CB4E0400F0A0E0A18B0
没有人提到有关这些GUID值的分布的任何内容。他们应该是非重复的,他们是。除非你每次都得到完全相同的输出。
答案 1 :(得分:16)
价值确实改变了......
*
64FE4083D6BA7CB4E0400F0A0E0A18B0
64FE4083D6BB7CB4E0400F0A0E0A18B0
64FE4083D6BC7CB4E0400F0A0E0A18B0
64FE4083D6BD7CB4E0400F0A0E0A18B0
64FE4083D6BE7CB4E0400F0A0E0A18B0
*