1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

variáveis no mysql: declare, set, como pegar um elemento de uma tabela na store procedure

falando em variáveis que se podem declarar dentro do begin, eu vi que tem Declare e set só que eu não sei quando usar as mesmas. vi que tem set @x, set x, set x = x+1, set x := x+1; todas elas me confudem e não sei para que servem direito. tenho esse código que é para pegar o código do produto que cada cliente mais comprou. Queria que ele pegasse o primeiro cliente de cada código e mostrasse, porque ordenei de forma desc.

tá saindo assim: nomeProduto, codigoProd, cliente, qtdComprada, ou seja queria mostrar a primeira linha de cada cliente.

ABAJUR             15    JOSE TAVARES DE OLUVEIRA    2

LAPISEIRA 1.2      10    JOSE TAVARES DE OLUVEIRA    1

CAIXA DE SOM       16    JOSE TAVARES DE OLUVEIRA    1

CANETA VERMELHA    3    MANOEL JOAQUIM PURTUGA       2

LAPISEIRA 0.9       9    MANOEL JOAQUIM PURTUGA     1

código:

/*Crie uma store procedure que informe o produto mais comprado de cada cliente*/
DELIMITER $$
DROP PROCEDURE IF EXISTS uspProdutoMaisCompradoCliente $$
CREATE PROCEDURE uspProdutoMaisCompradoCliente () 

BEGIN

DECLARE done BOOLEAN DEFAULT FALSE;
DECLARE vNomeProd VARCHAR(250);
DECLARE vNomeCli VARCHAR(250);
DECLARE vQtdComprProd INT(11);
DECLARE contador int;

DECLARE cursor_a CURSOR FOR (
    select produto.nome as nomeProd, cliente.nome as cliente, count(produto.codigo) as qtdComprProd
    from cliente
    inner join nota_fiscal
    on cliente.codigo = nota_fiscal.cod_cliente
    inner join item_nota_fiscal
    on item_nota_fiscal.numero_nf = nota_fiscal.numero_nf
    inner join produto
    on produto.codigo = item_nota_fiscal.cod_produto
    group by produto.nome , produto.codigo , cliente.nome , cliente.codigo
    order by cliente.nome, qtdComprProd desc
);

DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = TRUE;

DROP TEMPORARY TABLE IF EXISTS tempTabela;
     CREATE TEMPORARY TABLE tempTabela (
        tNomeProd VARCHAR(250),
        tNomeCli VARCHAR(250),
        tQtdComprProd INT(11)
);

OPEN cursor_a;

REPEAT
FETCH  cursor_a INTO vNomeProd,vNomeCli, vQtdComprProd;

    IF NOT done THEN

             INSERT INTO tempTabela VALUES (vNomeProd, vNomeCli, vQtdComprProd);

    END IF;

UNTIL done END REPEAT;
close cursor_a;
SELECT * FROM tempTabela;
END $$
DELIMITER ;
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags mysql sql ou faça a sua própria pergunta.