2025年7月25日金曜日

Oracle DatabaseでUUID version 4 (RFC 4122)の識別子を生成する

Oracle DatabaseではファンクションSYS_GUIDを呼び出すことにより、一意の識別子を生成できます。戻り値はRAW(16)の値です。ビット数は128ビット(8 x 16 = 128)になり、UUID version 4と同じです。

古いOracle DatabaseではSYS_GUIDが返す値の一意性に問題あったこともあるようですが(ChatGPTに聞くと教えてくれます)、今はそのようなことは無さそうです。

SYS_GUIDが返す値がUUID version 4準拠でないのは、RFC 4122の以下の条件を満たしていないためです。
  • 13バイト目の上位4ビットが 0100(= version 4)
  • 9バイト目の上位2ビットが 10(= variant)
UUID version 4に準拠した識別子を返すファンクションgenerate_uuid_v4を作成してみました。元はOpenAI GPT-4oで作成しましたが、ソースと思われるStackoverflowの記事やRFC 4122を確認して以下のコードに落ち着きました。


今回の記事は以上になります。