Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Inserindo registros pai/filho em uma transação


As inserções filhas veriam qualquer pai que tenha sido confirmado ou inserido anteriormente pela mesma transação (commitida ou não).

Uma coisa a verificar é se a inserção do pai está derivando automaticamente o valor da chave primária (por exemplo, por meio de um gatilho).

Ou seja, você emite a instruçãoINSERT em Contracts (contract_sequence_number, ...) valores (10437, ...);

mas um gatilho determina um novo contract_sequence_number da sequência e, na verdade, fornece a chave primária 10438 (ou qualquer outra).

Outro problema pode ser qualquer camada ORM que está atrapalhando o problema por não emitir as inserções na ordem correta ou usar conexões diferentes de um pool para uma única 'transação'.

Verifique também se a inserção do pai não retornou um erro.

Tente fazer uma transação de amostra por meio de um cliente convencional (como SQL*Plus) e veja se funciona. Se a inserção filho falhar lá, basta consultar a entrada mais recente do contrato (por exemplo, onde contract_sequence_number> 10400) e ver se a inserção foi bem-sucedida.