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

(mysql) actualización multiple con procedimientos almacenados

Estas en el tema de (mysql) actualización multiple con procedimientos almacenados en el foro de Bases de Datos General en Foros del Web. De antemano muchas gracias, Hago un sistema para calcular vacaciones, y tengo dos tablas "empleados" y "dias_libres", dentro de la tabla de empleados existe un ...
  #1 (permalink)  
Antiguo 04/11/2008, 19:34
 
Fecha de Ingreso: julio-2008
Mensajes: 35
Antigüedad: 16 años, 7 meses
Puntos: 1
(mysql) actualización multiple con procedimientos almacenados

De antemano muchas gracias,

Hago un sistema para calcular vacaciones, y tengo dos tablas "empleados" y "dias_libres", dentro de la tabla de empleados existe un campo que se llama "antiguedad", y ahi te muestra la antiguedad que tiene el empleado, en base a esa antiguedad se actualizara la tabla de "dias_libres", p.e. si el empleado tiene

1 año - 6 dias libres
2 años - 8 dias libres

A su ves, los dias libres generados tendran una fecha de caducidad........

el punto es que este procedimiento debe correr diariamente, lei un poco de lo que son los procedimientos almacenados y se que ahorran mucho tiempo, he realizado ejemplos, pero cuando recorres un registros por medio de "cursor", no puedes actualizar o insertar datos referenciando al row en el que estes,

realize este ejemplo
Código:
mysql>
CREATE PROCEDURE sp9 (OUT rx INT, OUT ry INT)
 BEGIN
  DECLARE x,y INT;
  DECLARE sp1_cursor CURSOR FOR SELECT id,txt FROM sp1;
  OPEN sp1_cursor;
   FETCH sp1_cursor INTO x,y;
  CLOSE sp1_cursor;
  SET rx = x;
  SET ry = y;
 END |
Alguna sugerencia o ayuda
  #2 (permalink)  
Antiguo 04/11/2008, 19:42
Avatar de bacdavi  
Fecha de Ingreso: junio-2006
Ubicación: http://localhost/
Mensajes: 351
Antigüedad: 18 años, 8 meses
Puntos: 7
Respuesta: (mysql) actualización multiple con procedimientos almacenados

Tal vez si usas la función MKtime??
esta función te devolverá un resultado de calculo de fechas...

//defino fecha 1
$ano1 = 2006;
$mes1 = 10;
$dia1 = 2;

//defino fecha 2
$ano2 = 2006;
$mes2 = 10;
$dia2 = 27;

//calculo timestam de las dos fechas
$timestamp1 = mktime(0,0,0,$mes1,$dia1,$ano1);
$timestamp2 = mktime(0,0,0,$mes2,$dia2,$ano2);

(este es un ejemplo) si te puedo ayudar en mas estoy a tus ordenes! tmbn si queres me podes escribir un mensaje privado!
  #3 (permalink)  
Antiguo 04/11/2008, 19:57
 
Fecha de Ingreso: julio-2008
Mensajes: 35
Antigüedad: 16 años, 7 meses
Puntos: 1
Respuesta: (mysql) actualización multiple con procedimientos almacenados

Muchas gracias bacdavi..... mas bien el problema es que cuando genero los dias libres que le corresponde por cada año, esos dias tienen una fecha de caducidad y el mismo procedimiento debe de chekar diaria mente si los dias libres del empleado ya caducaron y si es asi eliminarlos, y mas que nada para eso quiero implementar el procedimiento almacenado......
aqui hize este metodo para calcular la diferencia entre dos fechas parametrizando si quiero incluir sabados o domingos, el problema es que no conozco mucho de procedimientos almacenados....

Código PHP:
public function calculateDays($start_date,$end_date,$noSaturday="true",$noSunday="true",$noHollydays="true")
    {
        
$start_date=strtotime($start_date);
        
$end_date=strtotime($end_date);
        
$year intval(date("Y"$start_date));
        
$hollyDays=$this->getHollyday($year);
        
        
$difference=$end_date-$start_date;
        
$difference=$difference;
        
$seconds_per_day=86400;
        
// +1 adds the actual date
        
$difference_days=round($difference/$seconds_per_day );
        
$noLaborDays=0;
        
$isLabor=true;

        for(
$dayLoop=$start_date;$dayLoop<=$end_date;$dayLoop+=$seconds_per_day)
        {
            
$numberOfDay=date("N",$dayLoop);
            if(
$noSaturday == true && $numberOfDay == 6)
            {
$noLaborDays++;$isLabor=false;}
            if(
$noSunday == true && $numberOfDay == 7)
            {
$noLaborDays++;$isLabor=false;}
            if(
$noHollydays==true && $isLabor==true)
            {
                
$current=date("Y",$dayLoop);
                if(
$current!=$year)
                {
                    unset(
$hollyDays);
                    
$hollyDays=$this->getHollyday(intval(date("Y"$dayLoop)));
                }
                if(
in_array($dayLoop,$hollyDays))
                
$noLaborDays++;
            }
            
$isLabor=true;
        }

    
$totalOfDays=$difference_days-$noLaborDays;
    return 
$totalOfDays;

    } 

Muchas gracias
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 13:01.