2009-03-13 16 views
12

Tengo un proyecto de Oracle que sería una buena opción para usar GUID como clave. He encontrado el siguiente fragmento deOracle SYS_GUID no cambia

SET SERVEROUTPUT ON 
BEGIN 
FOR indx IN 1 .. 5 
LOOP 
DBMS_OUTPUT.put_line (SYS_GUID); 
END LOOP; 
END; 
/

De http://feuerthoughts.blogspot.com/2006/02/watch-out-for-sequential-oracle-guids.html

Cuando corro contra mi base de datos (lo probé en versiones 10g y la versión 11) consigo una salida como

64FE4083D6BA7CB4E0400F0A0E0A18B0 
64FE4083D6BB7CB4E0400F0A0E0A18B0 
64FE4083D6BC7CB4E0400F0A0E0A18B0 
64FE4083D6BD7CB4E0400F0A0E0A18B0 
64FE4083D6BE7CB4E0400F0A0E0A18B0 

es decir, el valor nunca cambia! ¿Hay algo que deba hacer para que todo funcione como se espera?

Editar: No soy muy observador: los GUID están cambiando, pero parece que estoy sufriendo el problema de GUID secuencial del que habla el enlace de arriba.

Respuesta

16

Parece correcto. De la descripción:

SYS_GUID genera y devuelve un identificador único global (valor RAW) componían de 16 bytes. En la mayoría de plataformas, el identificador generado consiste en un identificador de host, un identificador de proceso o subproceso del proceso o de hilos de invocar la función , y una no repetitivo valor (secuencia de bytes) para ese proceso o hilo .

de su ejemplo:

 
64FE4083D6BA7CB4E0400F0A0E0A18B0 
64FE4083D6BB7CB4E0400F0A0E0A18B0 
64FE4083D6BC7CB4E0400F0A0E0A18B0 
64FE4083D6BD7CB4E0400F0A0E0A18B0 
64FE4083D6BE7CB4E0400F0A0E0A18B0 

nadie mencionó nada acerca de la distribución de estos valores GUID. Deben ser no repetitivos y lo son. A menos que obtenga exactamente el mismo resultado cada vez.

+1

buenos ojos! Creo que este es el problema del que creo que he hablado. –

15

El valor cambia ....

  * 
64FE4083D6BA7CB4E0400F0A0E0A18B0 
64FE4083D6BB7CB4E0400F0A0E0A18B0 
64FE4083D6BC7CB4E0400F0A0E0A18B0 
64FE4083D6BD7CB4E0400F0A0E0A18B0 
64FE4083D6BE7CB4E0400F0A0E0A18B0 
      * 
+1

Gracias - Me siento estúpido ahora ... –

+1

:-) Todos hemos estado allí ... puedes mirar algo durante una hora y no detectar algo que un colega ve en 5 segundos. – cagcowboy

+1

Buen uso del formateo. –

Cuestiones relacionadas