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

Stored Procedure não reconhece valor das variaveis


hebertlcost

Pergunta

Boa tarde á todos.

Estou tentando executar a query abaixo, porém o MySql não reconhece o valor da variável.

SET @MES_ANTERIOR = "MARCO";
SET @MES = "ABRIL";
SET @MOVIMENTACAO = "MOVIMENTACAO_CEF_";
SET @LEVANTAMENTO = "CEF_LEVANTAMENTO_";
SET @DEPOSITO = "CEF_DEPOSITO_";


-- INICIO PROCEDURE SALDO_MES ANTERIOR --
DELIMITER $$
DROP PROCEDURE IF EXISTS SALDO_MES_ANTERIOR $$
CREATE PROCEDURE SALDO_MES_ANTERIOR ()
BEGIN

DECLARE MES_ANTERIOR VARCHAR(30) DEFAULT @MES_ANTERIOR;
DECLARE MOVIMENTACAO VARCHAR(30) DEFAULT CONCAT(@MOVIMENTACAO,@MES);
DECLARE MOVIMENTACAO_ANTERIOR VARCHAR(30) DEFAULT CONCAT(@MOVIMENTACAO,@MES_ANTERIOR);

UPDATE MOVIMENTACAO AS TAB_MOV
INNER JOIN MOVIMENTACAO_ANTERIOR AS TAB_MOV_ANT ON TAB_MOV_ANT.IDENT = TAB_MOV.IDENT
SET TAB_MOV.MARCO = TAB_MOV_ANT.MARCO
WHERE TAB_MOV.MARCO IS NULL;

END$$;
DELIMITER $$;
-- FIM PROCEDURE SALDO_MES ANTERIOR --

Já troquei aspas simples por aspas duplas e vice-versa, já coloquei := e apenas = para atribuir valor a variável.

O que acontece é que o MySql não está identificando o valor das variáveis, primeiramente o valor da variável MOVIMENTACAO que seria "MOVIMENTACAO_CEF_ABRIL", pois concatenei o valor das variáveis @MOVIMENTACAO e @MES.

Ele entende que estou tentando atualizar a tabela MOVIMENTACAO, ou seja não está vendo a variável MOVIMENTACAO e seu conteúdo.

O que fazer nesse caso?

 

Muito Obrigado.

 

Hebert Luiz Costa 

 

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Crie a procedure assim:

-- INICIO PROCEDURE SALDO_MES ANTERIOR --
DELIMITER $$
DROP PROCEDURE IF EXISTS SALDO_MES_ANTERIOR $$
CREATE PROCEDURE SALDO_MES_ANTERIOR (IN MES_ANTERIOR VARCHAR(20), IN MES VARCHAR(20), IN MOVIMENTACAO VARCHAR(20), 
IN LEVANTAMENTO VARCHAR(20), IN DEPOSITO VARCHAR(20))
BEGIN

SET @msql = CONCAT("UPDATE ", CONCAT(MOVIMENTACAO,MES), " AS TAB_MOV INNER JOIN ", 
CONCAT(MOVIMENTACAO,MES_ANTERIOR), " AS TAB_MOV_ANT ON TAB_MOV_ANT.IDENT = TAB_MOV.IDENT
SET TAB_MOV.MARCO = TAB_MOV_ANT.MARCO WHERE TAB_MOV.MARCO IS NULL");

PREPARE stmt FROM @msql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

Execute assim:

CALL SALDO_MES_ANTERIOR("MARCO","ABRIL","MOVIMENTACAO_CEF_","CEF_LEVANTAMENTO_","CEF_DEPOSITO_");

 

Link para o comentário
Compartilhar em outros sites

  • 0

Olá Denys, boa tarde.

Tudo bem com você?

Primeiramente gostaria de agradecer pela sua ajuda.

Testei da forma como você disse e funcionou perfeitamente.

Estou fazendo dezenas de outras procedure's porém tenho sempre o seguinte erro...:

Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NULL' at line 1

Estou pesquisando é pelo que já pude obter te material vi que é algo relacionado a utilização de aspas simples e aspas duplas, mas ainda não consegui resolver essa questão.

Vou postar novamente uma solução quando conseguir.

Sua ajuda me auxiliou e muito, muito obrigado...!!!

Um grande abraço!!!

Hebert Luiz Costa

 

 

 

 

 

 

Link para o comentário
Compartilhar em outros sites

  • 0

Olá Denis, boa tarde.

Tudo bem?

Estou todos esses dias pesquisando à respeito de MySql Dinâmico, para poder entender onde estão os erros nas procedure's que tive que criar, entretanto realmente algo relativamente simples se torna complexo pela falta de informações mais precisas.

Por fim acabei remodelando tudo e particionando mais as procedure's.

Quanto ao erro que comentei contigo realmente não consegui sana-lo, então refiz a procedure e dividi o procedimento em outras procedure's.

Mais uma vez muito obrigado pelo apoio e suporte.

Espero poder contribuir no Fórum, caso apareça alguma dúvida como essa.

Muito Obrigado e grande abraço.

Hebert

 

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...