MySQL Forums
Forum List  »  Spanish

Procedimientos almacenados
Posted by: Manuel Gutierrez
Date: May 24, 2018 01:21AM

Buenos días;

Tengo una pregunta curiosa, tengo un ubuntu server con Mysql Server 5.5.60 en el cual hay una serie de eventos que se ejecutan cada noche llamando a procedimientos almacenados.

He controlado el acceso a los eventos y procedimientos, en una tabla inserto donde entra y la hora, pues efectivamente los eventos se ejecutan y los procedimientos también pero no realizan su tarea. Entra en la condición específica pero no actualiza las tablas, lo curioso es que si haces la misma llamada que hace el evento de forma manual si se actualizan las tablas y pasa por las mismas condiciones que cuando se ejecuta de forma automática por las noches.

¿Alguien tiene idea de que puede estar pasando?

Os dejo el evento y el procedimiento.


EVENTO
------
BEGIN
CALL actualiza_viajes(DATE_SUB(DATE_FORMAT(NOW(), '%Y-%m-%d 00:00:00'), INTERVAL 1 DAY));
INSERT INTO event_messages(message,generated_at) Values('actualiza_viajes Preserve',NOW());
END


PROCEDURE 1
-----------

BEGIN
declare done int default 0;
declare operario_list varchar(8);


declare coperarios cursor for select operario from picadas_mes where ot like '%002%' and DATE_FORMAT(dia,'%d%m%Y')=DATE_FORMAT(picadas_mes.Fecha,'%d%m%Y');


declare continue handler for sqlstate '02000' set done=1;
insert into debug(debug) value('ENTRA VIAJEs');

open coperarios;
repeat
fetch coperarios into operario_list;
if not done then

CALL actualiza_viajes_operario(dia,operario_list);
end if;
UNTIL done end repeat;
close coperarios;

INSERT INTO event_messages(message,generated_at) Values('actualiza_viajes FINALIZADO',NOW());

END


PROCEDURE 2
-----------
BEGIN
DECLARE DONE INT DEFAULT 0;
DECLARE id_picada INT;
DECLARE ot_op VARCHAR(9);
DECLARE entrada TIME;
DECLARE salida TIME;
DECLARE ot_entrada VARCHAR(3);
DECLARE ot_salida VARCHAR(3);

DECLARE c1 CURSOR FOR select id,ot,DATE_FORMAT(h_entrada,'%H:%i:%s'),DATE_FORMAT(hora_salida,'%H:%i:%s'),SUBSTRING(ot,1,3),SUBSTRING(ot,6,3) from picadas_mes where operario=operario_picada and date_format(dia,'%d%m%Y')=date_format(picadas_mes.fecha,'%d%m%Y')
and ((ot like '%002%')) order by h_entrada ASC;
DECLARE continue handler for sqlstate '02000' set done=1;


select tipo_horario into @t_horario from operarios where operario=operario_picada;
select dayofweek(dia) as fecha_calculo from operarios group by fecha_calculo into @d_semana;

SELECT Direccion
INTO @n_operario
FROM operarios
WHERE operario = operario_picada;


select l_entrada_manana into @entrada_manana from horarios,operarios where operario=operario_picada and operarios.tipo_horario=horarios.tipo_horario and dia_semana=@d_semana;
select l_salida_manana into @salida_manana from horarios,operarios where operario=operario_picada and operarios.tipo_horario=horarios.tipo_horario and dia_semana=@d_semana;


select hora_entrada_manana_calculo_ot into @entrada_calculo_ot_manana from horarios,operarios where operario=operario_picada and operarios.tipo_horario=horarios.tipo_horario and dia_semana=@d_semana;
select hora_salida_manana_calculo_ot into @salida_calculo_ot_manana from horarios,operarios where operario=operario_picada and operarios.tipo_horario=horarios.tipo_horario and dia_semana=@d_semana;

OPEN c1;
REPEAT
fetch c1 into id_picada,ot_op,entrada,salida,ot_entrada,ot_salida;
if not done then

select observaciones from picadas_mes where id=id_picada into @observaciones_anteriores;
CASE


WHEN ((entrada >= @entrada_manana) and (ot_entrada='002') and (ot_salida <> '002') and NOT EXISTS(select * from picadas_mes where date_format(dia,'%d%m%Y')=date_format(picadas_mes.fecha,'%d%m%Y') and DATE_FORMAT(h_entrada,'%H:%i:%s')<entrada and DATE_FORMAT(h_entrada,'%H:%i:%s') < @salida_manana and operario=operario_picada)) THEN



UPDATE picadas_mes set observaciones=CONCAT(IFNULL(@observaciones_anteriores,''),' VIAJE COMIENZO JORNADA MANANA '),horas_compensadas=ADDTIME(horas_compensadas,TIMEDIFF(entrada,@entrada_calculo_ot_manana)),H_REALES=ADDTIME(hfh_compensadas,ADDTIME(h_computables,TIMEDIFF(entrada,@entrada_calculo_ot_manana))) where operario=operario_picada and observaciones not like '%VIAJE%' and id=id_picada;
INSERT INTO event_messages(message,generated_at) Values(concat("VIAJE INICIO JORNADA"," ",@n_operario),NOW());


WHEN ((salida <= @salida_manana) and (ot_entrada<> '002') and (ot_salida = '002') and NOT EXISTS(select * from picadas_mes where date_format(dia,'%d%m%Y')=date_format(picadas_mes.fecha,'%d%m%Y') and DATE_FORMAT(h_entrada,'%H:%i:%s')>entrada and (DATE_FORMAT(h_entrada,'%H:%i:%s') < @salida_manana and DATE_FORMAT(h_entrada,'%H:%i:%s')>entrada) and operario=operario_picada)) THEN

UPDATE picadas_mes set observaciones=CONCAT(IFNULL(@observaciones_anteriores,''),' VIAJE FINAL JORNADA MANANA '),horas_compensadas=ADDTIME(horas_compensadas,TIMEDIFF(@salida_calculo_ot_manana,salida)),H_REALES=ADDTIME(hfh_compensadas,ADDTIME(h_computables,TIMEDIFF(@salida_calculo_ot_manana,salida))) where operario=operario_picada and observaciones not like '%VIAJE%' and id=id_picada;
INSERT INTO event_messages(message,generated_at) Values(concat("VIAJE FINAL JORNADA"," ",@n_operario),NOW());

WHEN ((entrada >= @entrada_manana) and (salida <= @salida_manana) and ot_salida = '002' and EXISTS(select * from picadas_mes where date_format(dia,'%d%m%Y')=date_format(picadas_mes.fecha,'%d%m%Y') and DATE_FORMAT(h_entrada,'%H:%i:%s')>salida and DATE_FORMAT(h_entrada,'%H:%i:%s') < @salida_manana and ot like '%002E%' and operario=operario_picada) ) THEN


IF(EXISTS(select h_entrada from picadas_mes where date_format(dia,'%d%m%Y')=date_format(picadas_mes.fecha,'%d%m%Y') and DATE_FORMAT(h_entrada,'%H:%i:%s')>salida and DATE_FORMAT(h_entrada,'%H:%i:%s') < @salida_manana and ot like '%002E%' and operario=operario_picada))THEN
select h_entrada into @entrada_siguiente_manana from picadas_mes where date_format(dia,'%d%m%Y')=date_format(picadas_mes.fecha,'%d%m%Y') and DATE_FORMAT(h_entrada,'%H:%i:%s')>salida and DATE_FORMAT(h_entrada,'%H:%i:%s') < @salida_manana and ot like '%002E%' and operario=operario_picada;

UPDATE picadas_mes set observaciones=CONCAT(IFNULL(@observaciones_anteriores,''),' VIAJE MITAD JORNADA '),horas_compensadas=ADDTIME(horas_compensadas,TIMEDIFF(DATE_FORMAT(@entrada_siguiente_manana,'%H:%i:%s'),salida)),H_REALES=ADDTIME(hfh_compensadas,ADDTIME(h_computables,TIMEDIFF(DATE_FORMAT(@entrada_siguiente_manana,'%H:%i:%s'),salida))) where operario=operario_picada and (observaciones not like '%VIAJE MITAD JORNADA%') and id=id_picada;
INSERT INTO event_messages(message,generated_at) Values(concat("VIAJE MITAD JORNADA"," ",@n_operario),NOW());


END IF;

ELSE
BEGIN
IF(NOT EXISTS(select * from picadas_mes where date_format(dia,'%d%m%Y')=date_format(picadas_mes.fecha,'%d%m%Y') and DATE_FORMAT(hora_salida,'%H:%i:%s')<entrada and ot like '%002S%' and operario=operario_picada and observaciones like '%VIAJE%'))THEN

INSERT INTO incidencias(operario,fecha,ot,descripcion) values(operario_picada,DATE_FORMAT(CURDATE(),'%Y-%m-%d %H:%i:%s'),'002','REVISAR PICADA 002 (PROBLEMA CALCULOS)');
UPDATE picadas_mes set INCIDENCIA='1' where id=id_picada;
INSERT INTO event_messages(message,generated_at) Values(concat("VIAJE INCIDENCIA"," ",@n_operario),NOW());

END IF;
END;
END CASE;
END IF;
UNTIL done end repeat;

INSERT INTO event_messages(message,generated_at) Values('actualiza_viajess_operario FINALIZADO',NOW());

END

Options: ReplyQuote


Subject
Views
Written By
Posted
Procedimientos almacenados
1804
May 24, 2018 01:21AM


Sorry, you can't reply to this topic. It has been closed.

Content reproduced on this site is the property of the respective copyright holders. It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.