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

Cursor e procedure Mysql


Penny Lane

Pergunta

Pessoal, meu problema é o seguinte:

Eu tenho uma tabela de produtos onde tenho alguns dados. Eu preciso fazer a seguinte consulta para então alterar os registros

retornados:

1) Primeira consulta pego alguns campos para consulta no sistema A onde o campo Validacao seja = 1

2) Na segunda consulta eu pego os campos do mesmo sistema A, mas a condição é que tenha o campo Validacao != 1 e onde

alguns outros campos são iguais ao resultado da primeira consulta.

Eu preciso fazer isso, pois esse campo Validacao, indica no meu cadastro quando um produto pode ficar disponível para

uso (Validacao = 1) e quando ele está indisponível para uso (Validacao != 1).

Mas eu tenho aqui alguns funcionários que esqueceram de alterar esse campo quando cadastraram uns produtos, então tem muitos

produtos cadastrados, que podem estar disponíveis, mas que não estão. A condição para estar disponível é que o nome do

produto, a classe do produto e o grupo do produto tem que ser o mesmo de algum outro registro já validado.

Não sei se fui clara... hehehe mas vou colcar aqui as 2 procedures que criei para fazer a consulta e a alteração na base.

Procedure das consultas

DELIMITER $$

DROP PROCEDURE IF EXISTS `twoCursor` $$
CREATE PROCEDURE `twoCursor` ()
BEGIN
declare grupoprod, classeprod, idFact, idFact2, idMaster, idSlave, indexM, indexS int default 0;
declare nomeprod TEXT;

declare masterCursor cursor for Select SQL_CALC_FOUND_ROWS produto.codigo, 
                                               produto.nome_do_produto, 
                                               produto.grupo_produto, produto.classe_do_produto 
                                          from produto 
                                          where produto.sistema like 'A' and 
                                                (produto.validacao = 1);
declare slaveCursor cursor for Select SQL_CALC_FOUND_ROWS produto.codigo 
                                         from produto 
                                         where produto.sistema like 'B' and 
                                                (produto.validacao != 1 or produto.validacao is null) and 
                                                (produto.grupo_produto = grupoprod and
                                                produto.classe_do_produto = classeprod and 
                                                produto.nome_do_produto like nomeprod);

open masterCursor;

set idMaster = (Select FOUND_ROWS());

while indexM<idMaster do
   fetch masterCursor into idFact, grupoprod, classeprod, nomeprod;

   open slaveCursor;

   set idSlave = (Select FOUND_ROWS());

   while indexS < idSlave do
       fetch slaveCursor into idFact2;
      set @codmat2 = idFact2;
     
      call Proc2(@codmat2); 
   
      set indexS= indexS+1;
   end while;

   close slaveCursor;
   set indexM = indexM + 1;
end while;

close masterCursor;

END $$

DELIMITER;
Procedure da alteração
CREATE PROCEDURE `Proc2` (codigo int)
BEGIN
   UPDATE produto set produto.validacao = 1 
   WHERE produto.codigo = @codigo;
END
Chama procedure
call twoCursor;

Eu consegui exibir uma vez um código de um produto para ser alterado, mas mesmo assim não foi alterado o registro.

Se alguém puder me ajudar com isso.. eu fico muito grata... pois tenho um prazo curto para entrega da base pronta.. mas não

estou conseguindo visualizar porque o registro não é alterado....

Desde já agradeço a atenção de todos.

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

3 respostass a esta questão

Posts Recomendados

  • 0

Oi, 'Penny Lane'

Poderia por favor ser mais objetiva. Estou com a mente um tanto bagunçada a esta hora e não estou entendendo o que você quer.

Link para o comentário
Compartilhar em outros sites

  • 0

Basicamente o que eu quero:

1) fazer uma consulta numa tabela;

2) Eu faço um while em uma outra consulta passando como parametro resultados da consulta 1;

3) Com o resultado do while, eu altero registro por registro um campo dessa tabela que atenda as condições anteriores...

ajudou? :mellow:

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,1k
    • Posts
      651,8k
×
×
  • Criar Novo...