Ver Mensaje Individual
  #1 (permalink)  
Antiguo 04/09/2012, 08:26
r0xdrig0
 
Fecha de Ingreso: diciembre-2007
Mensajes: 385
Antigüedad: 16 años, 4 meses
Puntos: 0
stored procedure no entra a la ultima condicion del case!!!!

hola amigos, les explico; tengo un procedimiento almacenado que hace lo siguiente:

lo q haces es ir descontando los dias de feriados pedidos por el usuario, pasa q el usuario/trabajador puede acumular vacaciones de los dos ultimos años (el anterior y el presente) si el trabajador tiene feriados pendiente del año pasado entonces los dias de feriados q pida se les descontaran de los dias disponibles de feriado del año anterior, si los dias de feriados pedidos son mayor a la cantidad de dias q dispone del año anterior entonces los feriados del año anterior se restan a los dias de feriado pedidos hasta que quedan en cero y se le sigue descontandoa los dias de feriado q tenga disponible en el presente año, la cosa es q logro hacer estos descuentos (restar feriados del año anterior hasta q queden en cero seguir descontando los dias feriados del año presente), pero mi problema se presenta ahi, cuando el feriado del año presente queda en cero si sigo pidiendo feriados el feriado del año presente si esta en cero y le sigo pidiendo va dandome numeros negativos, este es mi problema, aqui pego mi stored procedure q nunca entra al ultimo when del CASE:

Código MySQL:
Ver original
  1. DELIMITER $$
  2.     DROP PROCEDURE IF EXISTS descontar_feriados $$
  3.     CREATE PROCEDURE descontar_feriados (funCodigo VARCHAR (11), diasPedidos INT)
  4.      
  5.     BEGIN
  6.      
  7.         DECLARE feriado1, feriado2, resultado_fer1, resultado_fer2, resultado_intermedio INT;
  8.         SET feriado1=0;
  9.      
  10.         SELECT fer_1, fer_2 INTO feriado1, feriado2 FROM datos WHERE Fun_Codigo = funCodigo;
  11.         CASE
  12.             #feriado1 mayor q dias pedidos
  13.             WHEN feriado1>diasPedidos THEN
  14.                 SET resultado_fer1= feriado1 - diasPedidos;
  15.                 UPDATE datos SET fer_1 = resultado_fer1 WHERE Fun_Codigo= funCodigo;
  16.             #feriado1 igual q dias pedidos
  17.             WHEN feriado1 = diasPedidos THEN
  18.                 SET resultado_fer1= feriado1 - diasPedidos;
  19.                 UPDATE datos SET fer_1 = resultado_fer1 WHERE Fun_Codigo= funCodigo;
  20.             #feriado1 menor q dias pedidos
  21.             WHEN feriado1<diasPedidos THEN
  22.                 SET resultado_fer1 = diasPedidos- feriado1 ;
  23.                 SET resultado_intermedio = feriado2 - resultado_fer1;
  24.                 UPDATE datos SET fer_1 = 0 WHERE Fun_Codigo= funCodigo;
  25.                 UPDATE datos SET fer_2 = resultado_intermedio WHERE Fun_Codigo= funCodigo;
  26.             #feriado2 mayor q dias pedidos
  27.             WHEN feriado1 = 0 AND feriado2> diasPedidos THEN
  28.                 SET resultado_fer2 = feriado2 - diasPedidos;
  29.                 UPDATE datos SET fer_2 = resultado_fer2 WHERE Fun_Codigo= funCodigo;
  30.             #feriado2 igual q dias pedidos
  31.             WHEN feriado2 = diasPedidos THEN
  32.                 SET resultado_fer2 = feriado2 - diasPedidos;
  33.                 UPDATE datos SET fer_2 = resultado_fer2 WHERE Fun_Codigo= funCodigo;
  34.            
  35.             #Esta es la parte del when q no me esta tomando...
  36.             WHEN resultado_fer2 < 0 THEN
  37.                 UPDATE datos SET fer_2 = 0 WHERE Fun_Codigo= funCodigo;
  38.         END CASE;
  39.     END

donde mi tabla tiene esta estructura (dondde fer_1 son los dias disponibles de feriado del año anterior y fer_2 del presente año)

cod_trabajador| fer_1 | fer_2

pq no me estara entrando al ultimo when amigos??? he probado cambiando de posicion ese ultimo when pero tampoco logro entrar a ese bloque.... porfavor agradeceria mucho su guia... atento a sus contestaciones ... gracias de antemano... bye