Ir para conteúdo
Fórum Script Brasil
  • 0

Problema para migrar stored procedure....Meio urgente


VArito

Pergunta

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;

Editado por Denis Courcy
Melhorar entendimento
Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Oi, 'VArito'!

Altere esta instrução

SELECT @vCargaHoraria := CargaHoraria*60 FROM Colaborador WHERE ColaboradorID = vColaboradorID;
para
SET @vCargaHoraria = (SELECT  CargaHoraria*60 FROM Colaborador WHERE ColaboradorID = vColaboradorID);

Link para o comentário
Compartilhar em outros sites

  • 0

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.

Editado por VArito
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...