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