How to generate a version 4 (random) UUID on Oracle?

前端 未结 9 1096
野性不改
野性不改 2020-12-05 10:37

This blog explains, that the output of sys_guid() is not random for every system:

http://feuerthoughts.blogspot.de/2006/02/watch-out-for-sequential-orac

9条回答
  •  暖寄归人
    2020-12-05 11:27

    It may not be unique, but generate a "GUID-like" random string:

     FUNCTION RANDOM_GUID
        RETURN VARCHAR2 IS
        RNG    NUMBER;
        N      BINARY_INTEGER;
        CCS    VARCHAR2 (128);
        XSTR   VARCHAR2 (4000) := NULL;
      BEGIN
        CCS := '0123456789' || 'ABCDEF';
        RNG := 15;
    
        FOR I IN 1 .. 32 LOOP
          N := TRUNC (RNG * DBMS_RANDOM.VALUE) + 1;
          XSTR := XSTR || SUBSTR (CCS, N, 1);
        END LOOP;
    
        RETURN XSTR;
      END RANDOM_GUID;
    

    Adapted from source of DBMS_RANDOM.STRING.

提交回复
热议问题