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

Storage Procedure Mysql


Pedro Henrique Rodrigues

Pergunta

Olá !!!

Preciso de fazer uma validação no banco de dados que envolvem 5 tabelas.

A validação é para modificar automaticamente o status do cliente no sistema conforme o seu estado.

Por exemplo:

  • Status 01: Se cliente não possui pedidos um status.
  • Status 02: Se possui pedidos ele tem um status.
  • Status 03: Se possui produtos vencendo outro status
  • Status 04: Se possui produtos vencidos outro status. 

Será realizada uma vez ao dia para não pesar o banco de dados, porém já estou a dois dias tentando elaborar essa procedure e não chego a lugar nenhum.

Tenho as seguintes tabelas no banco:

Cliente

Pedido

Item_Pedido

Produto

Status_Cliente (Esta tabela será modificada)

Alguém me sugere uma solução mais rápida?

Observação: Sistema desenvolvido em C#.

Grato.

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Tenta algo assim

DELIMITER $$
 
CREATE PROCEDURE Set_Status_Clientes()
BEGIN
	FOR
		SELECT c.id INTO @cliente, COUNT(p.id) INTO @pedidos FROM Cliente c LEFT JOIN Pedido AS p ON p.cliente_id = c.id GROUP BY c.id
	DO
		IF (@pedidos > 0) THEN
			UPDATE Cliente SET status = 'sem_pedidos' WHERE id = @cliente
		ELSE
			UPDATE Cliente SET status = 'com_pedidos' WHERE id = @cliente
			SELECT COUNT(p.id) INTO @produtos_vencendo FROM Cliente c INNER JOIN Pedido AS p ON p.cliente_id = c.id INNER JOIN Item_Pedido AS ip ON ip.pedido_id = p.id AND ip.validade BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 5 DAY) WHERE c.id = @cliente
			IF (@produtos_vencendo > 0) THEN
				UPDATE Cliente SET status = 'produtos_vencendo' WHERE id = @cliente
			END IF;
			SELECT COUNT(p.id) INTO @produtos_vencidos FROM Cliente c INNER JOIN Pedido AS p ON p.cliente_id = c.id INNER JOIN Item_Pedido AS ip ON ip.pedido_id = p.id AND ip.validade < NOW() WHERE c.id = @cliente
			IF (@produtos_vencidos > 0) THEN
				UPDATE Cliente SET status = 'produtos_vencidos' WHERE id = @cliente
			END IF;
		END IF;
	END FOR;
END $$
DELIMITER ;

 

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...