Pergunta
Eu tenho um projeto Oracle que seria um bom ajuste para usar GUIDs como chave. Eu encontrei o seguinte trecho
SET SERVEROUTPUT ON
BEGIN
FOR indx IN 1 .. 5
LOOP
DBMS_OUTPUT.put_line ( SYS_GUID );
END LOOP;
END;
/
A partir http: //feuerthoughts.blogspot .com / 2006/02 / relógio fora-de-sequencial de oráculo-guids.html
Quando eu executá-lo contra o meu banco de dados (eu tentei em versões 10g e versão 11) recebo uma saída como
64FE4083D6BA7CB4E0400F0A0E0A18B0
64FE4083D6BB7CB4E0400F0A0E0A18B0
64FE4083D6BC7CB4E0400F0A0E0A18B0
64FE4083D6BD7CB4E0400F0A0E0A18B0
64FE4083D6BE7CB4E0400F0A0E0A18B0
i. o valor nunca muda! Existe algo que eu tenho que fazer para configurá-lo para trabalhar como esperado?
Edit: Eu não sou muito observador - os GUIDs estão mudando, mas parece que eu estou sofrendo com o problema GUID seqüencial que o link acima está falando
.Solução
Parece OK. A partir da descrição:
SYS_GUID gera e retorna um globalmente identificador exclusivo (valor CRU) composta de 16 bytes. Na maioria plataformas, o gerado identificador consiste de um identificador de host, uma processo ou de fios de identificador da processo ou segmento invocando o função, e uma não repetidos valor (Sequência de bytes) para que o processo ou segmento.
A partir do seu exemplo:
64FE4083D6BA7CB4E0400F0A0E0A18B0 64FE4083D6BB7CB4E0400F0A0E0A18B0 64FE4083D6BC7CB4E0400F0A0E0A18B0 64FE4083D6BD7CB4E0400F0A0E0A18B0 64FE4083D6BE7CB4E0400F0A0E0A18B0
Ninguém mencionou nada sobre a distribuição desses valores GUID. Eles devem ser não repetidos e eles são. A menos que você obter exatamente a mesma saída de cada vez.
Outras dicas
O valor muda ....
*
64FE4083D6BA7CB4E0400F0A0E0A18B0
64FE4083D6BB7CB4E0400F0A0E0A18B0
64FE4083D6BC7CB4E0400F0A0E0A18B0
64FE4083D6BD7CB4E0400F0A0E0A18B0
64FE4083D6BE7CB4E0400F0A0E0A18B0
*