Ver Mensaje Individual
  #4 (permalink)  
Antiguo 06/07/2013, 11:12
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: procedimiento almacenado, no realiza instrucciones que escribo?!

Yo probaría mas o menos algo como:
Código MySQL:
Ver original
  1. DELIMITER $$
  2.  
  3. USE `proiplus`$$
  4.  
  5.  
  6. CREATE PROCEDURE `Elimina_Compra`(
  7.     IN CompraId VARCHAR(6),
  8.     IN usuario VARCHAR(20))
  9.     DECLARE vfecha DATETIME;
  10.     DECLARE vtotal DECIMAL(10,2);
  11.     DECLARE vproveedorID VARCHAR(6);
  12.     DECLARE vSaldo DECIMAL(10,2);
  13.     DECLARE vNuevoSaldo DECIMAL(10, 2);
  14.    
  15.     # Obtener Total y Proveedor
  16.    
  17.     SELECT Total, proveedor_id
  18.       INTO vTotal, vproveedorID
  19.       FROM compras
  20.      WHERE compra_id=CompraId;
  21.    
  22.     # Si se obtuvo un registro valido, se busca el saldo de cuentas por pagar
  23.    
  24.     IF vproveedorID IS NOT NULL THEN
  25.         SELECT Saldo
  26.           INTO vSaldo
  27.           FROM cuentas_por_pagar
  28.          WHERE proveedor_id=proveedorID
  29.            AND Estatus_Cuenta='Pendiente';
  30.        
  31.         #Si devuelve un saldo, se calcula el actual, o bien se resetea a cero si es NULL
  32.         IF vSaldo IS NOT NULL THEN
  33.             SET vNuevoSaldo = vSaldo - vTotal;
  34.         ELSE
  35.             SET vSaldo = 0;
  36.         END IF;
  37.        
  38.         # Se actualiza el estado de la cuenta en función del valor del nuevo saldo.
  39.        
  40.         UPDATE cuentas_por_pagar
  41.            SET Estatus_Cuenta = IF(vNuevoSaldo > 0, 'Pendiente', 'Cancelada'),
  42.                Usuario_Modifico=usuario,
  43.                Fecha_Modifico = NOW()
  44.          WHERE proveedor_id = vproveedorID
  45.            AND Estatus_Cuenta = 'Pendiente';
  46.            
  47.         #Si se realizó un UPDATE, se actualiza el estado de la compra.  
  48.        
  49.         IF FOUND_ROWS() = 1 THEN
  50.             UPDATE compras
  51.                SET Estatus_Compra='Cancelada',
  52.                    Usuario_Modifico=usuario,
  53.                    Fecha_Modifico=fecha
  54.              WHERE Compra_Id=CompraId;
  55.         END IF;
  56.     END IF;
  57.    
  58.     END$$
  59.  
  60. DELIMITER ;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)