Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] procedimiento almacenado, no realiza instrucciones que escribo?!

Estas en el tema de procedimiento almacenado, no realiza instrucciones que escribo?! en el foro de Mysql en Foros del Web. Ayuda por favor!!! tengo este procedimiento @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original DELIMITER $$   USE `proiplus` $$     CREATE DEFINER = `proi` @ ...
  #1 (permalink)  
Antiguo 03/07/2013, 17:25
Avatar de tanliz  
Fecha de Ingreso: abril-2013
Ubicación: Irapuato
Mensajes: 63
Antigüedad: 11 años
Puntos: 1
procedimiento almacenado, no realiza instrucciones que escribo?!

Ayuda por favor!!! tengo este procedimiento

Código MySQL:
Ver original
  1. DELIMITER $$
  2.  
  3. USE `proiplus`$$
  4.  
  5.  
  6. CREATE DEFINER=`proi`@`localhost` PROCEDURE `Elimina_Compra`(IN CompraId VARCHAR(6),
  7.                         IN usuario VARCHAR(20))
  8.     DECLARE fecha DATETIME;
  9.     DECLARE total DECIMAL(10,2);
  10.     DECLARE proveedorID VARCHAR(6);
  11.     DECLARE newSaldo DECIMAL(10,2);
  12.     SET fecha=NOW();
  13.     SET total=IFNULL((SELECT Total FROM compras WHERE compra_id=CompraId),0);
  14.     SET proveedorID=(SELECT Proveedor_Id FROM compras WHERE compra_id=CompraId);
  15.     SET newSaldo=IFNULL((SELECT Saldo FROM cuentas_por_pagar WHERE proveedor_id=proveedorID AND Estatus_Cuenta='Pendiente'),0)-total;
  16.    
  17.     IF newSaldo=0 THEN
  18.         UPDATE cuentas_por_pagar
  19.         SET Estatus_Cuenta='Cancelada',
  20.             Usuario_Modifico=usuario,
  21.             Fecha_Modifico=fecha
  22.         WHERE proveedor_id=proveedorID
  23.         AND Estatus_Cuenta='Pendiente';
  24.     ELSE
  25.         UPDATE cuentas_por_pagar
  26.         SET Saldo=newSaldo,
  27.             Usuario_Modifico=usuario,
  28.             Fecha_Modifico=fecha
  29.         WHERE proveedor_id=proveedorID
  30.         AND Estatus_Cuenta='Pendiente';
  31.     END IF;
  32.    
  33.    
  34.     UPDATE compras
  35.     SET Estatus_Compra='Cancelada',
  36.         Usuario_Modifico=usuario,
  37.         Fecha_Modifico=fecha
  38.     WHERE Compra_Id=CompraId;
  39.    
  40.     END$$
  41.  
  42. DELIMITER ;

la actualización de la compra si la realiza correctamente, pero en la condición nunca entra a la primera, siempre se pasa a la segunda, pienso que el error puede estar en las consultas que realizo primero, pero no logro encontrar el error... me podrían ayudar? MUCHAS GRACIAS DE ANTEMANO...
  #2 (permalink)  
Antiguo 05/07/2013, 16:58
 
Fecha de Ingreso: abril-2011
Mensajes: 66
Antigüedad: 13 años
Puntos: 7
Respuesta: procedimiento almacenado, no realiza instrucciones que escribo?!

Hola tanliz.

Consultas:

1.- Por donde necesitas que pase el segundo if que tienes declarado, por la primera condicion, o por la segunda ?

2.- Esta consulta:

Código MySQL:
Ver original
  1. SELECT Saldo FROM cuentas_por_pagar WHERE proveedor_id=proveedorID AND Estatus_Cuenta='Pendiente'

Al parecer esta arrojando un valor que es distinto de cero, y si deseas que pase por cierta consulta, deberias preguntar lo contrario, deberia preguntar:

Código MySQL:
Ver original
  1. IF newSaldo <> 0 THEN
  2. ......

Saludos.
  #3 (permalink)  
Antiguo 06/07/2013, 10:09
Avatar de tanliz  
Fecha de Ingreso: abril-2013
Ubicación: Irapuato
Mensajes: 63
Antigüedad: 11 años
Puntos: 1
Respuesta: procedimiento almacenado, no realiza instrucciones que escribo?!

Hola max_mouse, primero que nada, gracias por responder!
1.- ambas condiciones son importantes, y con cualquiera de las dos (IF newSaldo <>0 Ó IF newSaldo=0) que acepte me sirve...
El problema es presisamente ese, que no nunca entra a la primera condicion, no importa si esta: IF newSaldo<>0 Ó IF newSaldo=0
....
Por eso comentaba, que quizás podrían estas mis consultas, solo que no logro encontrar el error... ?

Última edición por gnzsoloyo; 06/07/2013 a las 10:35 Razón: Demasiados gritos... Todo mayusculas es GRITAR.
  #4 (permalink)  
Antiguo 06/07/2013, 11:12
Avatar de 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)
  #5 (permalink)  
Antiguo 08/07/2013, 07:18
Avatar de tanliz  
Fecha de Ingreso: abril-2013
Ubicación: Irapuato
Mensajes: 63
Antigüedad: 11 años
Puntos: 1
Respuesta: procedimiento almacenado, no realiza instrucciones que escribo?!

Hola, gracias por responder!, ya me funciono el procedimiento, quedo de esta manera:
Código MySQL:
Ver original
  1. CREATE DEFINER=`proi`@`localhost` PROCEDURE `Elimina_Compra`(IN CompraId VARCHAR(6),
  2.                         IN usuario VARCHAR(20))
  3.     DECLARE fecha DATETIME;
  4.     DECLARE totalCompra DECIMAL(10,2);
  5.     DECLARE proveedorID VARCHAR(6);
  6.     DECLARE newSaldo DECIMAL(10,2);
  7.     DECLARE oldSaldo DECIMAL(10,2);
  8.     SET fecha=NOW();
  9.     SET totalCompra=(SELECT Total FROM compras WHERE Compra_Id=CompraId);
  10.     SET proveedorID=(SELECT Proveedor_Id FROM compras WHERE Compra_Id=CompraId);
  11.     SET newSaldo=(SELECT Saldo-totalCompra
  12.                     FROM cuentas_por_pagar
  13.                     WHERE Proveedor_Id=proveedorID
  14.                     AND Estatus_Cuenta='Pendiente');
  15.    
  16.     IF newSaldo<=>0 THEN
  17.         UPDATE cuentas_por_pagar
  18.         SET Estatus_Cuenta='Cancelada',
  19.             Usuario_Modifico=usuario,
  20.             Fecha_Modifico=fecha
  21.         WHERE proveedor_id=proveedorID
  22.         AND Estatus_Cuenta='Pendiente';
  23.     ELSE
  24.         UPDATE cuentas_por_pagar
  25.         SET Saldo=newSaldo,
  26.             Usuario_Modifico=usuario,
  27.             Fecha_Modifico=fecha
  28.         WHERE proveedor_id=proveedorID
  29.         AND Estatus_Cuenta='Pendiente';  
  30.     END IF;
  31.    
  32.    
  33.     UPDATE compras
  34.     SET Estatus_Compra='Cancelada',
  35.         Usuario_Modifico=usuario,
  36.         Fecha_Modifico=fecha
  37.     WHERE Compra_Id=CompraId;
  38.    
  39.     END$$

Etiquetas: almacenado, procedimiento, select
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:14.