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

Problemas con unprocedimiento almacenado

Estas en el tema de Problemas con unprocedimiento almacenado en el foro de Mysql en Foros del Web. buenas amigos, gracias por la ayuda que me puedan brindar ... tengo un procedimiento almacenado que calcula el tiempo de uso de los activos de ...
  #1 (permalink)  
Antiguo 17/10/2013, 14:18
 
Fecha de Ingreso: enero-2007
Mensajes: 58
Antigüedad: 17 años, 2 meses
Puntos: 3
Problemas con unprocedimiento almacenado

buenas amigos, gracias por la ayuda que me puedan brindar ...
tengo un procedimiento almacenado que calcula el tiempo de uso de los activos de una tabla activos,
el problema es que cuando lo ejecuto a todos los registros me da un resultado equivocado, pero cuando lo corro a un solo registro lo hace bien, y no le encuentro donde esta el error.
cuelgo aqui el codigo a ver si alguien me puede ayudar.
Código MySQL:
Ver original
  1.     DECLARE bContinuar BOOLEAN DEFAULT true;
  2.     DECLARE VarSecuencia VARCHAR(50);
  3.     DECLARE Mensaje VARCHAR(100);
  4.     DECLARE VarValorActual DOUBLE(15,0);
  5.     DECLARE VarPorcentaje DOUBLE(15,0);
  6.     DECLARE VarValorAgregado DOUBLE(15,0);
  7.     DECLARE VarValor DOUBLE(15,0);
  8.     DECLARE VarDepAcum DOUBLE(15,0);
  9.     DECLARE VarDepAnual DOUBLE(15,0);
  10.     DECLARE VarDepMensual DOUBLE(15,0);
  11.     DECLARE VarDepDia DOUBLE(15,0);
  12.     DECLARE VarDepTotal DOUBLE(15,0);
  13.     DECLARE VarValorReal DOUBLE(15,0);
  14.     DECLARE VarNewVal DOUBLE(15,0);
  15.     DECLARE VarRestaAcumulada DOUBLE(15,0);
  16.     DECLARE VarFechaActual DATE;
  17.     DECLARE VarFechaAdq DATE;
  18.     DECLARE AnoAct INT;
  19.     DECLARE MesAct INT;
  20.     DECLARE DiaAct INT;
  21.     DECLARE Dia INT;
  22.     DECLARE Mes INT;
  23.     DECLARE Ano INT;
  24.     DECLARE AnoAdq INT;
  25.     DECLARE MesAdq INT;
  26.     DECLARE DiaAdq INT;
  27.     DECLARE AnosEnDias INT;
  28.     DECLARE MesesEnDias INT;
  29.     DECLARE TiempoDeUso INT;
  30.     DECLARE cursor1 CURSOR FOR SELECT SECUENCIA, PORCDEP, VALORACTUAL, VALORAGREGADO, VALOR, FECHAADQUISICION, TOTALDEPRECIADO FROM activos;
  31.     DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET bContinuar = false;
  32.     SET VarFechaActual = CURDATE();
  33.     SET AnoAct = YEAR(NOW());
  34.     SET MesAct = MONTH (NOW());
  35.     SET DiaAct = DAY(NOW());
  36.  
  37.     OPEN cursor1;
  38.     REPEAT
  39.     FETCH cursor1 INTO VarSecuencia, VarPorcentaje, VarValorActual, VarValorAgregado, VarValor, VarFechaAdq, VarDepAcum;
  40.     IF bContinuar THEN
  41.         SET AnoAdq = YEAR(VarFechaAdq);
  42.         SET MesAdq = MONTH (VarFechaAdq);
  43.         SET DiaAdq = DAY(VarFechaAdq);
  44.  
  45.         IF DiaAct < DiaAdq THEN
  46.             SET MesAct = MesAct - 1;
  47.             SET DiaAct = DiaAct + 30;
  48.         END IF;
  49.         IF MesAct < MesAdq THEN
  50.             SET AnoAct = AnoAct - 1;
  51.             SET MesAct = MesAct + 12;
  52.         END IF;
  53.         SET Dia = DiaAct - DiaAdq;
  54.         SET Mes = MesAct - MesAdq;
  55.         SET Ano = AnoAct - AnoAdq;
  56.  
  57.         SET Mensaje = CONCAT('En el inventario, el tiempo de uso es de: ', Ano, ' años, ', Mes , ' mes/es y ', Dia, ' días');
  58.        
  59.         SET AnosEnDias = Ano * 365;
  60.         SET MesesEnDias = Mes * 30;
  61.         SET TiempoDeUso = AnosEnDias + MesesEnDias + Dia;
  62.         UPDATE activos SET activos.FECHAACTUAL = VarFechaActual, activos.TIEMPOUSO = Mensaje WHERE SECUENCIA = VarSecuencia;
  63.     END IF;
  64.     UNTIL NOT bContinuar END REPEAT;
  65.     CLOSE cursor1;
  66. SELECT "Activos Actualizados con Exito";
  67.  

hay algunas variables que no se estan usando todavia pero que mas a delante las usare estas no intervienen en el codigo hasta ahora...
la tabla tiene un campo FECHAADQUISICION, un campo FECHAACTUAL y un campo TIEMPOUSO

si calculo el tiempo de uso a un solo registro me da este resultado:
En el inventario, el tiempo de uso es de: 2 años, 9 mes/es y 14 días
la fehca de adquisicion es 2011-01-03
las fecha actual es 2013-10-17
este resultado es correcto

pero si calculo a todos me da este resultado:
En el inventario, el tiempo de uso es de: 2 años, 8 mes/es y 44 días

gracias por la ayuda...

Etiquetas: almacenado, campo, registro, registros, select, sql, tabla
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 23:15.