Estou migrando uma stored procedure de um sqlserver para o mysql. O banco é de um sistema de ponto, e a procedure calcula o saldo. Fiz alterações necessárias de conversão de data, e tem um update que no mysql não aceita um select dentro de um update.
Mas enfim, eu desmotei os comandos sql e a princípio retornam os mesmos resultados, mas no update no mysql está inserindo nulo na tabela.
PREciso de uma ajuda aí pra ver se tem algo errado, por isso aí vai o código: (Agradeço a ajuda!)
DELIMITER $$
DROP PROCEDURE IF EXISTS `CalculaSaldo` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `CalculaSaldo`(in vColaboradorID INT)
BEGIN
DECLARE vDone INT DEFAULT 0;
DECLARE vPontoID INT;
DECLARE vCargaHoraria INT;
DECLARE vTrabalho INT;
DECLARE vSaldoAux INT;
DECLARE vDataAtual DateTime;
DECLARE vStatus INT default 0;
-- Busca todas as datas que devem ser atualizadas (ultimos 30 dias)
DECLARE Curs CURSOR FOR
SELECT str_to_date(date_format(Entrada,'%Y-%m-%d 00:00:00'), get_format(Datetime, 'iso')),
SUM(Trabalho)
FROM Ponto
WHERE
ColaboradorID = vColaboradorID AND
DATEDIFF(now(), Entrada) <= 180 AND
DATEDIFF(now(), Entrada) >= 1
GROUP BY str_to_date(date_format(Entrada,'%Y-%m-%d 00:00:00'), get_format(Datetime, 'iso'))
ORDER BY 1;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = 1;
-- Busca a carga horária do colaborador
SELECT @vCargaHoraria := CargaHoraria*60 FROM Colaborador WHERE ColaboradorID = vColaboradorID;
OPEN Curs;
REPEAT
FETCH Curs INTO vDataAtual, vTrabalho;
IF NOT vDone THEN
SELECT @vSaldoAUx := IFNULL((SELECT saldo
FROM Ponto
WHERE ColaboradorID = vColaboradorID
AND Str_to_date(Date_format(Entrada,'%Y-%m-%d 00:00:00'), Get_format(DATETIME,'iso')) < Str_to_date(Date_format(vDataAtual,'%Y-%m-%d 00:00:00'),Get_format(DATETIME,'iso'))
ORDER BY Entrada DESC
LIMIT 1),0) + vTrabalho - (CASE
WHEN Weekday(vDataAtual) IN (5,6)
THEN 0
ELSE vCargaHoraria
END);
UPDATE Ponto
SET Saldo = @vSaldoAux
WHERE ColaboradorID = vColaboradorID
AND Str_to_date(Date_format(Entrada,'%Y-%m-%d 00:00:00'),
Get_format(DATETIME,'iso')) = Str_to_date(Date_format(vDataAtual,'%Y-%m-%d 00:00:00'),Get_format(DATETIME,'iso'));
END IF;
UNTIL vDone END REPEAT;
CLOSE Curs;
END $$
DELIMITER;
Pergunta
VArito
Bom dia galera,
Seguinte....
Estou migrando uma stored procedure de um sqlserver para o mysql. O banco é de um sistema de ponto, e a procedure calcula o saldo. Fiz alterações necessárias de conversão de data, e tem um update que no mysql não aceita um select dentro de um update.
Mas enfim, eu desmotei os comandos sql e a princípio retornam os mesmos resultados, mas no update no mysql está inserindo nulo na tabela.
PREciso de uma ajuda aí pra ver se tem algo errado, por isso aí vai o código: (Agradeço a ajuda!)
Editado por Denis CourcyMelhorar entendimento
Link para o comentário
Compartilhar em outros sites
2 respostass a esta questão
Posts Recomendados