Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Einfügen von über-/untergeordneten Datensätzen in eine Transaktion

Die untergeordneten Einfügungen würden alle übergeordneten Elemente sehen, die entweder festgeschrieben oder zuvor von derselben Transaktion eingefügt wurden (ob festgeschrieben oder nicht).

Eine zu überprüfende Sache ist, ob die Einfügung des Elternschlüssels automatisch den Primärschlüsselwert ableitet (z. B. durch einen Trigger).

Das heißt, Sie setzen die Anweisung INSERT in Contracts (contract_sequence_number, ...) values ​​(10437, ...);

aber ein Trigger bestimmt eine neue Contract_sequence_number aus der Sequenz und gibt ihr tatsächlich den Primärschlüssel 10438 (oder was auch immer).

Ein weiteres Problem kann eine ORM-Schicht sein, die das Problem vermasselt, indem sie die Einfügungen nicht in der richtigen Reihenfolge ausgibt oder verschiedene Verbindungen aus einem Pool für eine einzelne „Transaktion“ verwendet.

Überprüfen Sie auch, dass die Einfügung des Elternteils keinen Fehler zurückgegeben hat.

Versuchen Sie, eine Beispieltransaktion über einen herkömmlichen Client (z. B. SQL*Plus) durchzuführen, und prüfen Sie, ob das funktioniert. Wenn die untergeordnete Einfügung dort fehlschlägt, fragen Sie einfach den letzten Eintrag aus dem Vertrag zurück (z. B. wo Vertragssequenznummer> 10400) und prüfen Sie, ob die Einfügung erfolgreich war.