Ir para conteúdo
Fórum Script Brasil

VArito

Membros
  • Total de itens

    2
  • Registro em

  • Última visita

Tudo que VArito postou

  1. Não sei, não funcionou essa mudança....o select não retorna nada....(No resultset returned) =/ Não sou expert em bd, mas acho que o problema mesmo está no laço de repetição, talvez em algum comando sql.
  2. 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!) 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;
×
×
  • Criar Novo...