sql >> Databasteknik >  >> RDS >> Oracle

Infoga överordnade/barnregister i en transaktion

Den underordnade infogningen skulle se vilken förälder som helst som antingen har begåtts eller tidigare har infogats av samma transaktion (oavsett om den har begåtts eller inte).

En sak att verifiera är om insättningen av föräldern automatiskt härleder det primära nyckelvärdet (t.ex. genom en trigger).

Det vill säga, du utfärdar statementINSERT i Contracts (contract_sequence_number, ...) värden (10437, ...);

men en trigger bestämmer ett nytt contract_sequence_number från sekvensen och ger den faktiskt primärnyckeln 10438 (eller vad som helst).

Ett annat problem kan vara vilket ORM-lager som helst som förstör problemet genom att inte utfärda inläggen i rätt ordning eller använda olika anslutningar till en pool för en enda "transaktion".

Kontrollera också att inlagan av föräldern inte returnerade ett fel.

Försök att göra en exempeltransaktion genom en konventionell klient (som SQL*Plus) och se om det fungerar. Om den underordnade infogningen misslyckas där, fråga bara tillbaka den senaste posten från kontraktet (t.ex. där contract_sequence_number> 10400) och se om infogningen lyckades.



  1. Failover på MySQL JDBC-anslutningar?

  2. Varför auto_increment-id inte ökar en efter en, hur ställer jag in det?

  3. Fråga med LEFT JOIN returnerar inte rader för antalet 0

  4. Hur beräknar man DATUM-skillnaden i PostgreSQL?