Ver Mensaje Individual
  #1 (permalink)  
Antiguo 27/07/2008, 20:08
lucasarts_18
 
Fecha de Ingreso: enero-2007
Mensajes: 272
Antigüedad: 19 años, 10 meses
Puntos: 5
Pregunta Control elegante de transacciones

Hola foristas:

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";
        }
    }
} 
Como podrán darse cuenta, lo que hago es rastrear el error y de acuerdo a este seguimiento aplico commit o en su defecto rollback.

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...

Última edición por lucasarts_18; 05/08/2008 a las 21:28