Oracle
 sql >> Database >  >> RDS >> Oracle

Inserimento di record padre/figlio in una transazione

Gli inserimenti figlio vedrebbero qualsiasi genitore che è stato sottoposto a commit o è stato precedentemente inserito dalla stessa transazione (indipendentemente dal fatto che sia stato eseguito il commit).

Una cosa da verificare è se l'inserimento del genitore sta derivando automaticamente il valore della chiave primaria (ad esempio tramite un trigger).

Cioè, emetti statementINSERT nei valori di Contracts (contract_sequence_number, ...) (10437, ...);

ma un trigger determina un nuovo numero_sequenza_contratto dalla sequenza e gli fornisce effettivamente la chiave primaria 10438 (o qualsiasi altra cosa).

Un altro problema potrebbe essere qualsiasi livello ORM che sta rovinando il problema non emettendo gli inserti nell'ordine corretto o utilizzando connessioni diverse su un pool per una singola "transazione".

Controlla anche che l'inserimento del genitore non abbia restituito un errore.

Prova a eseguire una transazione di esempio tramite un client convenzionale (come SQL*Plus) e verifica se funziona. Se l'inserimento figlio non riesce, basta interrogare la voce più recente del contratto (ad es. dove numero_sequenza_contratto> 10400) e verificare se l'inserimento è riuscito.