Ist es möglich, eine GUID automatisch in eine Insert-Anweisung zu generieren?
Welche Art von Feld sollte ich zum Speichern dieser GUID verwenden?
Mit der Funktion SYS_GUID () können Sie eine GUID in Ihrer insert-Anweisung generieren:
insert into mytable (guid_col, data) values (sys_guid(), 'xxx');
Der bevorzugte Datentyp zum Speichern von GUIDs ist RAW (16).
Als Antwort von Gopinath:
select sys_guid() from dual
union all
select sys_guid() from dual
union all
select sys_guid() from dual
Du erhältst
88FDC68C75DDF955E040449808B55601
88FDC68C75DEF955E040449808B55601
88FDC68C75DFF955E040449808B55601
Wie Tony Andrews sagt, unterscheidet sich nur bei einem Charakter
88FDC68C75D D F955E040449808B55601
88FDC68C75D E F955E040449808B55601
88FDC68C75D F F955E040449808B55601
Vielleicht nützlich: http://feuerehowts.blogspot.com/2006/02/watch-out-for-sequential-oracle-guids.html
Sie können die Guid auch standardmäßig in die create-Anweisung der Tabelle aufnehmen, zum Beispiel:
Siehe hier: http://rwijk.blogspot.com/2009/12/sysguid.html
quelle
Es ist nicht klar, was Sie unter automatischer Generierung einer Guid in eine Insert-Anweisung verstehen, aber ich denke, Sie versuchen, Folgendes zu tun:
In diesem Fall sollte die ID-Spalte meines Erachtens als RAW (16) deklariert werden.
Ich mache das auf Anhieb. Ich habe keine Oracle-Instanz zum Testen, aber ich denke, das ist es, was Sie wollen.
quelle
Beispiel gefunden unter: http://www.orafaq.com/usenet/comp.databases.oracle.server/2006/12/20/0646.htm
Ergebnis:
quelle
sys_guid () ist eine schlechte Option, wie andere Antworten erwähnt haben. Eine Möglichkeit, UUIDs zu generieren und sequentielle Werte zu vermeiden, besteht darin, zufällige Hex-Zeichenfolgen selbst zu generieren:
quelle
Sie können die folgende Abfrage ausführen
quelle
Sie können die folgende Funktion verwenden, um Ihre UUID zu generieren
Beispiel einer GUID, die durch die obige Funktion erzeugt wurde:
8EA4-196D-BC48-9793-8AE8-5500-03DC-9D04
quelle
Wenn Sie nicht sequentielle Hilfslinien benötigen, können Sie die
sys_guid()
Ergebnisse über eine Hashing-Funktion senden (siehe https://stackoverflow.com/a/22534843/1462295 ). Die Idee ist, die Einzigartigkeit der ursprünglichen Kreation beizubehalten und etwas mit mehr gemischten Teilen zu erhalten.Zum Beispiel:
Beispiel für die standardmäßige sequentielle Anleitung im Vergleich zum Senden über einen Hash:
Ausgabe
quelle
Ich würde empfehlen, die Oracle-Funktion "dbms_crypto.randombytes" zu verwenden.
Warum? Diese Funktion gibt einen RAW-Wert zurück, der eine kryptografisch sichere pseudozufällige Folge von Bytes enthält, mit der zufälliges Material für Verschlüsselungsschlüssel generiert werden kann.
Sie sollten die Funktion "sys_guid" nicht verwenden, wenn sich nur ein Zeichen ändert.
https://docs.oracle.com/database/121/SQLRF/functions202.htm#SQLRF06120
quelle