Frage

ich aus der SQL-Server-Welt komme, wo wir hatten unique. Gibt es ein Äquivalent in Oracle? Diese Spalte wird häufig abgefragt werden, um die Leistung ist der Schlüssel.

Ich erzeuge die GUID in .Net und wird es Oracle werden übergeben. Für ein paar Gründe kann es nicht von Oracle erzeugt werden, damit ich nicht Folge verwenden kann.

War es hilfreich?

Lösung

CREATE table test (testguid RAW(16) default SYS_GUID() ) 

Dieser Blog untersucht die relative Performance.

Andere Tipps

Wie schon andere gesagt haben, gibt es eine Performance-Einbußen GUIDs im Vergleich zu numerischen Sequenzen. Das heißt, es ist eine Funktion mit dem Namen „ SYS_GUID () “zur Verfügung, da Oracle 8i, die die rohen äquivalent sieht vor:

SQL> SELECT SYS_GUID() FROM DUAL;

SYS_GUID()
--------------------------------
248AACE7F7DE424E8B9E1F31A9F101D5

Eine Funktion erstellt werden, um eine formatierte GUID zurückgeben:

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 ;
/

So ein austauschbares String Rückkehr:

SQL> SELECT GET_FORMATTED_GUID() FROM DUAL ;

GET_FORMATTED_GUID()
--------------------------------------
{15417950-9197-4ADD-BD49-BA043F262180}

Eine Anmerkung zur Vorsicht vorgenommen werden soll, dass einige Oracle-Plattformen zurückkehren ähnlich, aber nach wie vor eindeutige Werte von GUIDs wie von Steven Feuerstein bemerkt .

Wenn ich die Frage richtig zu verstehen, wollen Sie eine eindeutige ID erzeugen, wenn Sie eine Zeile in der db einzufügen.
Sie könnten eine Sequenz verwenden , dies zu tun. Link
Nachdem Sie Ihre Sequenz erstellt haben, können Sie es wie folgt verwendet werden:

INSERT INTO mytable (col1, col2) VALUES (myseq.NEXTVAL, 'some other data');

RAW (16) ist offenbar das bevorzugte Äquivalent für die UNIQUE MS SQL-Typ.

GUIDs werden nicht wie in Oracle wie in MSSQL verwendet wird, neigen wir dazu, ein Zahlenfeld zu haben (nicht null & Primärschlüssel), eine Sequenz, und einen Trigger für Insert um es zu füllen (für jede Tabelle).

Es gibt keine Unique in Oracle.

Sie können ein selbst implementieren unter Verwendung von Raw- (eine Art Schmerz) oder CHAR. Performance auf Abfragen, die auf einem CHAR-Feld JOIN leidet (vielleicht so viel wie 40%) im Vergleich zu einer ganzen Zahl verwendet wird.

Wenn Sie tun, verteilt / replizierten Datenbanken, ist die Performance-Einbußen es wert. Ansonsten nur eine ganze Zahl verwenden.

Die allgemeine Praxis Oracle verwendet, ist einen künstlichen Schlüssel zu erstellen. Dies ist eine Spalte als Zahl definiert. Es wird über eine Sequenz bevölkert. Es ist indiziert / über einen Primärschlüssel Definition eingeschränkt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top