Ver Mensaje Individual
  #1 (permalink)  
Antiguo 27/07/2008, 20:08
lucasarts_18
 
Fecha de Ingreso: enero-2007
Mensajes: 272
Antigüedad: 17 años, 4 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