Comme d'autres l'ont dit, l'utilisation de GUIDs a un impact sur les performances par rapport aux séquences numériques. Cela dit, il existe une fonction appelée " SYS_GUID() " disponible depuis Oracle 8i qui fournit l'équivalent brut :
SQL> SELECT SYS_GUID() FROM DUAL;
SYS_GUID()
--------------------------------
248AACE7F7DE424E8B9E1F31A9F101D5
Une fonction pourrait être créée pour renvoyer un GUID formaté :
CREATE OR REPLACE FUNCTION GET_FORMATTED_GUID RETURN VARCHAR2 IS guid VARCHAR2(38) ;
BEGIN
SELECT SYS_GUID() INTO guid FROM DUAL ;
guid :=
'{' || SUBSTR(guid, 1, 8) ||
'-' || SUBSTR(guid, 9, 4) ||
'-' || SUBSTR(guid, 13, 4) ||
'-' || SUBSTR(guid, 17, 4) ||
'-' || SUBSTR(guid, 21) || '}' ;
RETURN guid ;
END GET_FORMATTED_GUID ;
/
On obtient ainsi une chaîne de caractères interchangeable :
SQL> SELECT GET_FORMATTED_GUID() FROM DUAL ;
GET_FORMATTED_GUID()
--------------------------------------
{15417950-9197-4ADD-BD49-BA043F262180}
Il convient de noter que certaines plates-formes Oracle renvoient des valeurs de GUID similaires mais toujours uniques. comme indiqué par Steven Feuerstein.
Mise à jour 11/3/2020 : Avec 10g, Oracle a ajouté la prise en charge des fonctions d'expressions régulières, ce qui signifie que la concaténation peut être simplifiée à l'aide de l'option REGEXP_REPLACE()
fonction.
REGEXP_REPLACE(
SYS_GUID(),
'([0-9A-F]{8})([0-9A-F]{4})([0-9A-F]{4})([0-9A-F]{4})([0-9A-F]{12})',
'{\1-\2-\3-\4-\5}'
)
L'expression décompose la valeur de la chaîne retournée par SYS_GUID()
en 5 groupes de valeurs hexadécimales et le reconstruit en insérant un "-" entre chaque groupe.