Estoy trabajando con PHP-Oracle y estoy llevando las transacciones desde el propio php y no desde los procedimientos almacenados Oracle ya que en ocasiones ejecuto 4 SP y de acuerdo a esto debo hacer commit o rollback.
Todo lo anterior es, para mantener la integridad de los datos y no dejar (registros sin integridad).
Actualmente lo estoy haciendo como se ve en el siguiente código.
Código PHP:
if (isset($_POST['btnGrabar'])) {
$mensaje = validar();
if ($error == false) {
$ordenCompra = array('id_cliente' => $idCliente,
'nroOrdCompra' => $nroOrdCompra, 'nroPedido' => $nroPedido,
'descripcion' => $descripcion, 'fecha' => $fecha,
'proveedor' => 1, 'neto' => $neto, 'iva' => $iva,
'total' => $total, 'estado' => 'PEN');
$mensaje = registrarOrdCompra($ordenCompra);
foreach($_SESSION['grilla'] as $codBarra => $valor){
if ($mensaje == '')
$mensaje = registrarOrdCompraDet($idCliente, $nroOrdCompra, $valor['coditem'],
$valor['pCosto'] , $valor['cant']);
if ($mensaje == '')
$mensaje = registrarOrdCompraArt($idCliente, $nroOrdCompra, $valor['codartic'],
$valor['pCosto'], $valor['cant']);
if ($mensaje == '')
$mensaje = registrarOrdCompraItem($idCliente, $nroOrdCompra, $valor['coditem'],
$valor['cant']);
}
if ($mensaje == '')
oci_commit($conn);
else{
oci_rollback($conn);
$tpMensaje = "error";
}
}
}
Mi idea es hacer esto mucho más elegante, me gustaria hacer que existiera una especie de excepción y de acuerdo a esto aplicar rollback, pero todavía no lo veo muy claro, quizás hasta componer un clase, quien sabe
¿Alguien tiene una idea de hacer algo mas eficiente y elegante?
Gracias...