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%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:
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.