Ver Mensaje Individual
  #3 (permalink)  
Antiguo 09/07/2011, 07:53
uv3
 
Fecha de Ingreso: noviembre-2009
Mensajes: 31
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: Update + select con mas de un row

xSUEId es un parametro (int) que recibe el procedure en el que uso esa linea. Lo voy a probar y te contaré un poco más de que se trata.

Muy bien me funcionó a la perfección, muchas gracias.

El siguiente procedure es el que uso para liquidar el sueldo de un chofer :

Código MySql:
Ver original
  1. drop procedure if exists altaSueldo;
  2. delimiter $$
  3. CREATE procedure altaSueldo (SUEId int, xCHOId int, fecha varchar(45), monto decimal (9,2), xCHOSueldo decimal (9,2))
  4.      BEGIN
  5.         INSERT INTO GVIAJES.SUELDO (SUEId, CHOId, SUEFecha, SUEMonto, CHOSueldo) values (SUEId, xCHOId, fecha, monto,xCHOSueldo);
  6.         INSERT INTO GVIAJES.SUELDO_VIAJES (SUEId, VIAId) (SELECT SUEId, VIAId from VIAJE where CHOId=xCHOId and VIAPago=0);
  7.         INSERT INTO GVIAJES.SUELDO_ADELANTOS (SUEId, ADEId) (SELECT SUEId, ADEId from ADELANTO where CHOId=xCHOId and ADEDescontado=0);
  8.         INSERT INTO GVIAJES.SUELDO_BIATICOS(SUEId, BIAId) (SELECT SUEId, BIAId from BIATICO where CHOId=xCHOId and BIADescontado=0);
  9.         UPDATE GVIAJES.VIAJE SET VIAPago=1 where CHOId=xCHOId;
  10.         UPDATE GVIAJES.ADELANTO SET ADEDescontado=1 where CHOId=xCHOId;
  11.         UPDATE GVIAJES.BIATICO SET BIADescontado=1 where CHOId=xCHOId;
  12.      END;
  13. $$
  14. delimiter ;

Y con el siguiente procedure lo que quiero es revertir el sueldo (en caso de liquidar por error) y volver todo a la normalidad.

Código MySql:
Ver original
  1. drop procedure if exists eliminarSueldo;
  2. delimiter $$
  3. CREATE procedure eliminarSueldo (xSUEId int)
  4.      BEGIN
  5.      
  6.       UPDATe GVIAJES.ADELANTO A
  7.               INNER JOIN
  8.               SUELDO_ADELANTOS SA ON A.ADEId = SA.ADEId  
  9.               INNER JOIN
  10.               SUELDO S ON SA.SUEId=S.SUEId
  11.       SET A.ADEDescontado=0 WHERE S.SUEId=xSUEId;
  12.      
  13.       UPDATe GVIAJES.BIATICO B
  14.               INNER JOIN
  15.               SUELDO_BIATICOS SB ON B.BIAId = SB.BIAId  
  16.               INNER JOIN
  17.               SUELDO S ON SB.SUEId=S.SUEId
  18.       SET B.BIADescontado=0 WHERE S.SUEId=xSUEId;
  19.      
  20.       UPDATe GVIAJES.VIAJE V
  21.               INNER JOIN
  22.               SUELDO_VIAJES SV ON V.VIAId = SV.VIAId  
  23.               INNER JOIN
  24.               SUELDO S ON SV.SUEId=S.SUEId
  25.       SET V.VIAPago=0 WHERE S.SUEId=xSUEId;
  26.      
  27.         DELETE FROM GVIAJES.SUELDO_ADELANTOS WHERE SUEID=xSUEId;
  28.         DELETE FROM GVIAJES.SUELDO_BIATICOS WHERE SUEID=xSUEId;
  29.         DELETE FROM GVIAJES.SUELDO_VIAJES WHERE SUEID=xSUEId;
  30.         DELETE FROM GVIAJES.SUELDO WHERE SUEID=xSUEId;
  31.        
  32.     END;
  33. $$
  34. delimiter ;

Muchas gracias. Ya de paso te copio la indentacion que esta muy prolija.

Última edición por uv3; 09/07/2011 a las 08:15