Идентификатор GUID Oracle SYS не изменяется
у меня есть проект 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
т. е. значение никогда не меняется! Есть ли что-то, что я должен сделать, чтобы настроить это на работу как ожидаемые?
Edit: я не очень наблюдателен - GUID меняются, но похоже, что я страдаю от последовательной проблемы GUID, о которой говорит ссылка выше.
2 ответов
ОК. Из описания:
SYS_GUID генерирует и возвращает глобальный уникальный идентификатор (необработанное значение) состоит из 16 байт. На большинстве платформы, сгенерированный идентификатор состоит из идентификатора узла, в идентификатор процесса или потока процесс или поток, вызывающий функция, и не повторяется значение (последовательность байтов) для этого процесса или нити.
из своего пример:
64FE4083D6BA7CB4E0400F0A0E0A18B0 64FE4083D6BB7CB4E0400F0A0E0A18B0 64FE4083D6BC7CB4E0400F0A0E0A18B0 64FE4083D6BD7CB4E0400F0A0E0A18B0 64FE4083D6BE7CB4E0400F0A0E0A18B0
никто ничего не говорил о распределении этих значений GUID. Они не должны повторяться, и так оно и есть. Если вы не получаете точно такой же результат каждый раз.
значение изменяется....
*
64FE4083D6BA7CB4E0400F0A0E0A18B0
64FE4083D6BB7CB4E0400F0A0E0A18B0
64FE4083D6BC7CB4E0400F0A0E0A18B0
64FE4083D6BD7CB4E0400F0A0E0A18B0
64FE4083D6BE7CB4E0400F0A0E0A18B0
*