sql >> Base de Datos >  >> RDS >> Oracle

Inserción de registros principal/secundario en una transacción

Las inserciones secundarias verían cualquier padre que haya sido confirmado o insertado previamente por la misma transacción (ya sea confirmado o no).

Una cosa para verificar es si la inserción del elemento principal deriva automáticamente el valor de la clave principal (por ejemplo, a través de un disparador).

Es decir, emite la sentencia INSERT en Contratos (número_secuencia_contrato, ...) valores (10437, ...);

pero un activador determina un nuevo contract_sequence_number a partir de la secuencia y, de hecho, le da la clave principal 10438 (o lo que sea).

Otro problema puede ser cualquier capa ORM que esté estropeando el problema al no emitir las inserciones en el orden correcto o al usar diferentes conexiones fuera de un grupo para una sola 'transacción'.

También verifique que la inserción del padre no haya devuelto un error.

Intente realizar una transacción de muestra a través de un cliente convencional (como SQL*Plus) y vea si funciona. Si la inserción secundaria falla allí, simplemente consulte la entrada más reciente del contrato (por ejemplo, donde número_secuencia_contrato> 10400) y vea si la inserción tuvo éxito.