Comment générer un UUID version 4 (aléatoire) sur Oracle?
Ce blog explique, que la sortie de sys_guid()
n'est pas aléatoire pour chaque système:
http://feuerthoughts.blogspot.de/2006/02/watch-out-for-sequential-oracle-guids.html
Malheureusement, je utiliser un tel système.
Comment s'assurer d'obtenir un aléatoire UUID? Est-il possible avec sys_guid()
? Si non, comment fiable pour obtenir un aléatoire UUID sur Oracle?
source d'informationauteur ceving
Vous devez vous connecter pour publier un commentaire.
Voici un exemple complet, basé sur @Pablo de Santa Cruz de la réponse et le code que vous avez posté.
Je ne suis pas sûr de savoir pourquoi vous avez un message d'erreur. C'est probablement un problème avec SQL Developer. Tout fonctionne bien lorsque vous exécutez dans SQL*Plus, et ajouter une fonction:
Mais je m'en tiendrais à
SYS_GUID
si possible. Regardez ID 1371805.1 sur My Oracle Support - ce bogue est théoriquement fixé dans 11.2.0.3.MODIFIER
Lequel est le plus rapide dépend de la façon dont les fonctions sont utilisées.
Il ressemble à la version de Java est légèrement plus rapide lorsque utilisé en SQL. Toutefois, si vous allez utiliser cette fonction dans une PL/SQL contexte, la fonction PL/SQL est sur
deux fois plus rapide. (Probablement parce qu'il évite la surcharge de la commutation entre les moteurs.)
Voici un exemple rapide:
Version 4 Guid ne sont pas complètement aléatoire. Certains des octets sont censé être corrigé. Je ne sais pas pourquoi cela a été fait, ou si c'est important, mais selon https://www.cryptosys.net/pki/uuid-rfc4122.html:
Les valeurs à partir de la version de Java semble être conformes à la norme.
https://stackoverflow.com/a/10899320/1194307
Suivants en fonction de l'utilisation sys_guid() et de la transformer en un uuid format:
Il n'est pas nécessaire de créer dbms_crypto paquet et de les accorder.
Je l'utiliser aujourd'hui comme une solution de contournement:
La fonction nécessite
dbms_crypto
etutl_raw
. Les deux nécessitent une exécution de la subvention.Vous pouvez écrire un Java procédure et de le compiler et de l'exécuter à l'intérieur d'Oracle. Dans cette procédure, vous pouvez utiliser:
À générer de la valeur désirée.
Voici un lien sur comment compiler java procédures dans Oracle.
Il peut ne pas être unique, mais de générer un "GUID" comme de la chaîne aléatoire:
Adapté à partir de la source de DBMS_RANDOM.CHAÎNE de caractères.
Le plus facile et le plus court chemin pour obtenir un Java-fonction pour moi a été:
Je ne peux pas tout à fait comprendre pourquoi il ne compile pas si j'ajoute
.toString()
.