Ich möchte explizite Daten in zwei verschiedene Tabellen einfügen, die durch einen Fremdschlüssel mit demselben sequenzgenerierten Wert in beiden Tabellen verknüpft sind.Multitabelleneinfügung mit sequenzgenerierter ID schlägt aufgrund Fremdschlüsselverletzung fehl
Ich versuche eine INSERT ALL-Anweisung zusammen mit einer WITH-Klausel aus aufeinander folgenden UNION ALL-Anweisungen zu verwenden, um dies zu erreichen.
Solange die With-Klausel nicht mehr als 256 Zeilen zurückgibt, funktioniert alles einwandfrei. Sobald ich eine andere UNION ALL-Eintrag hinzufügen, ich die folgende Fehlermeldung erhalten:
ORA-02291: Integritätsbedingung verletzt (MY_SCHEMA.FK_TABLE_B_TO_TABLE_A) - geordneten Schlüssel nicht gefunden * Ursache: Ein Fremdschlüsselwert hat keinen übereinstimmenden Primärschlüsselwert. * Aktion: Löschen Sie den Fremdschlüssel oder fügen Sie einen passenden Primärschlüssel hinzu.
Wenn ich die Fremdschlüsseleinschränkung deaktivieren, funktioniert wieder alles (sogar mit mehr als 256 Zeilen).
Meine Anweisung sieht wie folgt aus:
insert all
into MY_SCHEMA.TABLE_A (ID, COLUMN_1, COLUMN_2)
values (MY_SCHEMA.MY_SEQUENCE.nextval, COLUMN_1, COLUMN_2)
into MY_SCHEMA.TABLE_B (ID, COLUMN_3)
values (MY_SCHEMA.MY_SEQUENCE.nextval, COLUMN_3)
with input_data as (
select 11 COLUMN_1, 12 COLUMN_2, 13 COLUMN_3
UNION ALL
select 21 COLUMN_1, 22 COLUMN_2, 23 COLUMN_3
UNION ALL
...
UNION ALL
select 31 COLUMN_1, 32 COLUMN_2, 33 COLUMN_3
)
select * from input_data;
Gibt es eine Begrenzung der Menge an Daten, die eine solche Anweisung verarbeiten kann? Oder vermisse ich etwas anderes?
Ich benutze Oracle 11g und SQLDeveloper.
Sie etwas fehlen. Der Fehler ist ein Datenüberprüfungsfehler, der besagt, dass eine Fremdschlüsselbedingung nicht erfüllt ist. Es hat nichts mit der Größe der Daten zu tun. Ein möglicher Täter ist, dass die zusätzlichen Zeilen, die Sie einfügen möchten, doppelte Werte haben. –
Vielen Dank für Ihre Eingabe, wie erklären Sie dann, dass das Deaktivieren des FK den Fehler verschwinden lässt (mit allen Daten, die korrekt eingefügt werden, hätte ich erwähnen sollen)? –
Also, wenn Sie die FK deaktivieren und die gleiche Union alle verwenden, werden alle (mehr als 256) Zeilen eingefügt und Tabellen haben die gleichen IDs? – artm