Atribuindo valor em uma variável através de query dinâmica – MySQL

Publicado: 22 de agosto de 2013 em Diversos

Neste post irei demonstrar como executar um Prepared Statements para atribuir valores a variáveis dinamicamente, estou assumindo que saiba o que é um Stored Procedure e seus recursos, caso não saiba o que estou falando recomendo ler este ARTIGO, caso queira saber mais sobre Prepared Statement leia ESTE.

Cenário:

Um certa condição IF precisa saber que ação tomar para inserir registros em uma tabela de destino, porém antes de executar precisa averiguar o último registro da tabela de destino, se for vazio ou nulo significa que não há registros e precisa pegar o primeiro registro da origem, atribuir em uma variável de start e inserir os registros a partir do início. Coisas de ETL kkkkkk

Agora a questão que fica no ar é: Como farei para atribuir um valor de uma variável com dados da origem, se estou executando um SELECT para atribuir a uma variável já ativa no caso IDStartCon2 ???

Para isso uma das soluções seria atribuir o valor do SELECT em uma variável de usuário usando o INTO, mas outra questão aparece. L Como executar e retornar o valor para a próxima linha e continuar o código?

Bom para isso usuremos o Prepared Statement. (Referências lá no início lembra? )

O trecho de código de exemplo abaixo comentando irá ajudar a esclarecer todos os questionamentos levantados

— Recebendo o ultimo ID da tabela de destino (Imagine que seja o SELECT do seu ambiente )
SET v_ultima_id=(SELECT MAX(factClipDetailsIDFROM mos_index_bi WHERE factOttID=v_mos_indexType AND factSourceID=v_mos_indexSource AND  factYearID=yearNumber);

— AVERIGUANDO SE VALOR É VÁLIDO
  IF (v_ultima_id IS NULL OR v_ultima_id=THEN
     — AQUI ACONTECE A MÁGICA (USAREMOS A VARIÁVEL v_IDStartCon2 COMO APOIO PARA MONTAR A QUERY DINAMICAMENTE E ATRIBUIR O VALOR …
     — GERADO A VARIAVEL DE USUARIO @v_IDStart2 PROVIDA DO MENOR VALOR DA TABELA DE ORIGEM E USUANDO O INTO DENTRO DO SELECT PARA       

         — ATRIBUIR O VALOR.
     SET v_IDStartCon2= (‘select MIN(ID) INTO @v_IDStart2 from Relaciones WHERE TIPO <> ”P”’);

        — AQUI ESTOU PREPARANDO PARA EXECUTAR A CONSULTA
     PREPARE STMT1 FROM v_IDStartCon2;

        — AQUI IREI EXECUTAR A CONSULTA PARA RECEBER O RESULTADO EM @v_IDStart2
     EXECUTE STMT1;    

        — PRONTO JA TEM A A VARIÁVEL EM MEMÓRIA PRONTA PARA USAR COMO QUISER 😉
        SET v_ultima_id=@v_IDStart2;
        SET v_ultima_id2=@v_IDStart2 + v_IDIncremental;        

END IF;

É isso ai galera qualquer duvida , avisa!

 

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s