Подтвердить что ты не робот

Oracle SYS_GUID не изменяется

У меня есть проект 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, о которой говорит выше ссылка.

4b9b3361

Ответ 1

Кажется ОК. Из описания:

SYS_GUID генерирует и возвращает глобально уникальный идентификатор (значение RAW) состоящий из 16 байтов. В большинстве случаев платформы, сгенерированный идентификатор состоит из идентификатора хоста, идентификатор процесса или потока процесс или поток, вызывающий функции и неповторяющееся значение(последовательность байтов) для этого процесса или поток.

В вашем примере:

64FE4083D6BA7CB4E0400F0A0E0A18B0
64FE4083D6BB7CB4E0400F0A0E0A18B0
64FE4083D6BC7CB4E0400F0A0E0A18B0
64FE4083D6BD7CB4E0400F0A0E0A18B0
64FE4083D6BE7CB4E0400F0A0E0A18B0

Никто не упоминал о распределении этих значений GUID. Они должны быть неповторимыми, и они есть. Если вы не получаете точно такой же выход каждый раз.

Ответ 2

Значение изменяется....

           *
64FE4083D6BA7CB4E0400F0A0E0A18B0
64FE4083D6BB7CB4E0400F0A0E0A18B0
64FE4083D6BC7CB4E0400F0A0E0A18B0
64FE4083D6BD7CB4E0400F0A0E0A18B0
64FE4083D6BE7CB4E0400F0A0E0A18B0
           *