INSERT ALL INTO und Sequence.nextval für einen Ersatzschlüssel

8

Ich versuche 40 Zeilen mit einem INSERT ALL INTO einzufügen und bin mir nicht sicher, wie ich den Ersatzschlüssel einfügen soll. Hier ist, was ich habe

%Vor%

Wenn ich nun ein weiteres INTO VALUES hinzufüge, bekomme ich eine eindeutige Constraint-Verletzung.

%Vor%

Wie kann ich den sequences nextval-Wert für jede INTO VALUES aktualisieren, so dass ich die eindeutige Integritätsverletzung umgehen kann? Ich nahm an, dass nextval sich automatisch aktualisiert.

UPDATE : Ich weiß nicht, ob das der beste Weg ist, damit umzugehen, aber hier ist die Lösung, die mir einfällt:

Zuerst habe ich eine Funktion erstellt, die einen Wert zurückgibt Dann habe ich diese Funktion im ID-Feld der VALUES-Klausel

aufgerufen %Vor%     
Robert 03.12.2011, 19:20
quelle

3 Antworten

0

Sie können etwas wie folgt verwenden:

%Vor%

Obwohl es kein sehr praktisches Format ist, insbesondere wenn Sie weitere Spalten hinzufügen möchten. Sie müssten wahrscheinlich eine weitere UNION ALL -Abfrage erstellen und diese mit LEVEL oder ROWNUM verbinden.

Mein erster Gedanke war, so etwas zu tun:

%Vor%

Aber es generiert ORA-02287: sequence number not allowed here , aufgrund der Einschränkungen für Sequenzwerte .

Übrigens, bist du sicher, dass dein INSERT ALL ohne Unterabfrage funktioniert? Ich bekomme den Fehler ORA-00928: missing SELECT keyword und das Diagramm aus dem 11.2 Handbuch Impliziert, dass es eine Unterabfrage geben muss:

    
Jon Heller 05.12.2011, 04:37
quelle
1

Da ich von einem SQL Server-Hintergrund bin, habe ich immer einen Auslöser für die Tabelle erstellt, um die IDENTITY-Funktionalität zu emulieren. Sobald der Trigger aktiviert ist, wird der SK automatisch aus der Sequenz generiert, genau wie die Identität, und Sie müssen sich nicht darum kümmern.

    
Nick.McDermaid 11.09.2013 23:02
quelle
0

Ich weiß nicht, ob dies der beste Weg ist, um damit fertig zu werden, aber hier ist die Lösung, die ich gefunden habe:

Zuerst habe ich eine Funktion erstellt, die einen Wert zurückgibt Dann habe ich diese Funktion im ID-Feld der VALUES-Klausel

aufgerufen %Vor%     
Robert 04.12.2011 21:56
quelle

Tags und Links