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 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 に答える