Ver Mensaje Individual
  #1 (permalink)  
Antiguo 14/12/2012, 13:11
r0xdrig0
 
Fecha de Ingreso: diciembre-2007
Mensajes: 385
Antigüedad: 16 años, 11 meses
Puntos: 0
Problema con 2 cursores y condicion IF

Hola amigos como estan??? por aca yo nuevamente, esta vez estoy desarrollando un procedimiento almacenado con cursores, lo q ago es lo siguiente:
tengo dos tablas una donde tengo la fecha de ingreso y el id del empleado y en la otra tabla tengo los dias q le corresponden al empleado deacuerdo a los años trabajados que lleva en la empresa cuado tiene de 1 a 15 años le corresponden 15 dias al año de vacaciones, bueno el procedimiento almacenado con dos cursores q tengo (uno para cada tabla) y mi SP es:

Código MySQL:
Ver original
  1. DELIMITER $$
  2. DROP PROCEDURE IF EXISTS curActualizaDiasCorresp $$
  3. CREATE PROCEDURE curActualizaDiasCorresp()
  4.  
  5. DECLARE completado INT DEFAULT 1;
  6. DECLARE fecActual DATE;
  7. DECLARE fecIngreso DATE;
  8. DECLARE anio INT;
  9. DECLARE FUN_COD_DATOS VARCHAR(11);
  10. DECLARE FUN_COD_FEC_INGRESO VARCHAR(11);
  11. DECLARE FERI_2 INT;
  12. DECLARE FERI_CORRESP INT;
  13.  
  14. DECLARE curDatos CURSOR FOR SELECT Fun_Codigo, FER_2 FROM DATOS;
  15. DECLARE curFecIngresos CURSOR FOR SELECT FUN_CODIGO, FECHA_INGRESO FROM FECHA_INGRESOS;
  16. DECLARE CONTINUE HANDLER FOR NOT FOUND SET completado = 0;
  17.  
  18. set anio = 0;
  19. set fecActual = CURDATE();
  20. OPEN curDatos;
  21. OPEN curFecIngresos;
  22.  
  23.     miLoop: LOOP
  24.  
  25.     FETCH curDatos INTO FUN_COD_DATOS, FERI_2;
  26.     FETCH curFecIngresos INTO FUN_COD_FEC_INGRESO, fecIngreso;
  27.  
  28.  
  29.    
  30.     SET anio = (YEAR(fecActual) - YEAR(fecIngreso)) - IF(RIGHT(fecActual,5)
  31. < RIGHT(fecIngreso,5),1,0);
  32.    
  33.        
  34. IF MONTH(fecIngreso) >= MONTH(fecActual)
  35.         AND (DAY(fecIngreso) >= DAY(fecActual)) AND anio >= 1 AND anio <= 14 THEN  
  36.  
  37.         select anio;
  38.         SELECT FUN_COD_FEC_INGRESO;
  39.         SELECT FUN_COD_DATOS;
  40.  
  41.         UPDATE datos SET feriado_corresp = 15
  42.         WHERE FUN_CODIGO =FUN_COD_FEC_INGRESO ;
  43.  
  44.     ELSEIF (anio >=20) THEN
  45.         select anio;
  46.         SELECT FUN_COD_FEC_INGRESO;
  47.         SELECT FUN_COD_DATOS;
  48.  
  49.         UPDATE datos SET feriado_corresp = 25
  50.         WHERE FUN_CODIGO =FUN_COD_FEC_INGRESO ;
  51.  
  52.     IF completado =0 THEN
  53.  
  54.       LEAVE miLoop;
  55.     END IF;
  56.  
  57.     END IF;
  58.  
  59.     END LOOP;
  60.  
  61.     CLOSE curDatos;
  62.     CLOSE curFecIngresos;
  63.  
este SP compara la fecha de ingreso con la fecha actual y ahi calcula cuantos años lleva el empleado en la empresa y de acuerdo a esos años compara y va aumentando los diass de vacaciones, mi problema es q si dejo solamente un IF ahi si me hace la actualizacion deacuerdo a la concicion q le pongo en el if pero si pongo dos if (ambos con distintas condiciones) no me funciona ninguno :(.... por eso consulto aca y les dejo mi codigo para q me guien y me digan e q estoy fallando, ya q es primera vez q trabajo con cursores y he logrado hacer lo q tengo ahi solo buscando y leyendo... agradeceria mucho su ayuda amigos... quedo atento a sus posibles respuestas saludos.