Oracle
 sql >> Base de données >  >> RDS >> Oracle

Insertion d'enregistrements parent/enfant dans une transaction

Les insertions enfant verraient tout parent qui a été validé ou qui a été précédemment inséré par la même transaction (qu'elle soit validée ou non).

Une chose à vérifier est si l'insertion du parent dérive automatiquement la valeur de la clé primaire (par exemple via un déclencheur).

Autrement dit, vous émettez la déclaration INSERT dans les valeurs des contrats (contract_sequence_number, ...) (10437, ...);

mais un déclencheur détermine un nouveau contract_sequence_number à partir de la séquence et lui donne en fait la clé primaire 10438 (ou autre).

Un autre problème peut être n'importe quelle couche ORM qui complique le problème en n'émettant pas les insertions dans le bon ordre ou en utilisant différentes connexions sur un pool pour une seule "transaction".

Vérifiez également que l'insertion du parent n'a pas renvoyé d'erreur.

Essayez d'effectuer un exemple de transaction via un client conventionnel (tel que SQL*Plus) et voyez si cela fonctionne. Si l'insertion enfant échoue à cet endroit, interrogez simplement l'entrée la plus récente du contrat (par exemple, où contract_sequence_number> 10400) et voyez si l'insertion a réussi.