Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Ich bin mir mehr.

Stored Procedure Complexa

Recommended Posts

Ola pessoal,

 

Estou com um problema na criação de uma sp que acesse duas tabelas e retorne os dados.

O cenario é o seguinte.

 

tb_pedido - Cabeçalho do pedido

- pedido

- cliente

tb_item_pedido - Itens do pedido

- pedido

- item

- valor_1

- valor_2

 

Eu irei passar o numero do pedido e a sp me retorna os dados do pedido, porém na logica eu preciso definir que se o item do pedido começar com 2 eu pego o valor do campo valor_2, mas se o item do pedido começar com 1 eu pego do campo valor_1.

 

pseudo codigo

 

-------------------------

seleciona pedido;

seleciona dados do pedido;

 

loop pedido.

 

para cada pedido ler tabela item_pedido;

se item começar = 1;

{

obter valor_1;

}

senao se item começar = 2;

{

obter valor_2;

}

endloop.

 

retornar pedido, cliente, item, valor;

 

-------------------------

 

Se alguém puder me ajudar a criar a procedure me ajudaria muito, pois não sou muito familiarizado com a sintaxe do mysql.

 

Desde ja muito obrigado pela ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A meu ver você faz um INNER JOIN

e a parte do se item começar = 1; você faz na sua linguagem dinamica ( php, asp etc...)

 

select * tb_pedido a INNER JOIN tb_item_pedido b ON b.pedido = a.pedido

Tenta isso aê

Compartilhar este post


Link para o post
Compartilhar em outros sites

Leandromx

 

O join até me ajudaria, mas eu não gostaria que a minha procedure ja me retornace os campos no ligar certo, prefiro não executar a logica no cliente, mas sim no servidor, na stored procedure, o problema é que não sei a sintaxe MySQL para criar essa procedure.

 

Não sei como percorer a tabela selecionada e depois jogar as informações em uma tabela interna da sp e retornar essa tabela.

 

Você poderia me ajudar com isso???

Compartilhar este post


Link para o post
Compartilhar em outros sites

Leandromx

 

O join até me ajudaria, mas eu não gostaria que a minha procedure ja me retornace os campos no ligar certo, prefiro não executar a logica no cliente, mas sim no servidor, na stored procedure, o problema é que não sei a sintaxe MySQL para criar essa procedure.

 

Não sei como percorer a tabela selecionada e depois jogar as informações em uma tabela interna da sp e retornar essa tabela.

 

Você poderia me ajudar com isso???

 

Em primeiro lugar, a sua aplicação roda de um servidor e não no cliente. O que roda no cliente é css, javascript etc.

Em segundo lugar, é uma boa concentrar certos processamentos no banco, já que isso pode evitar tráfego na rede (no caso do banco estar em um server separado, por exemplo) dentre outros benefícios. Então sua idéia é boa.

 

você pode fazer mais ou menos assim, caso queira fazer mais de um SELECT e retornar os resultados juntos por exemplo:

DELIMITER $$

DROP PROCEDURE IF EXISTS `banco`.`sp_nome` $$
CREATE PROCEDURE `sp_nome`()
BEGIN

  DECLARE var1 VARCHAR(50);
  DECLARE var2 VARCHAR(50); -- variaveis, com tipo e tamanho

  SELECT campo1 INTO var1 FROM tabela1 LIMIT 1;
  SELECT campo2 INTO var2 FROM tabela2 LIMIT 1;

  -- select retornado para a aplicacao
  SELECT var1, var2;

END $$

DELIMITER ;

vale lembrar que se a consulta retornar mais de um resultado essa abordagem não irá funcionar (por isso eu coloquei o limit).

Talvez exista um jeito melhor de fazer isso, mas acho que funciona.

 

Você pode ler mais sobre Stored Procedures no meu blog:

http://www.freelancersbrasil.com/tag/stored-procedures/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Lucas,

 

No caso da tabela retornar mais dados, como eu faço para ler esses dados em um "for"?

Ou seja, gostaria de jogar os dados dentro de uma tabela temporaria, e percorrer essa tabela dentro de um loop ou while!!

 

Isso é possivél??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Lucas,

 

No caso da tabela retornar mais dados, como eu faço para ler esses dados em um "for"?

Ou seja, gostaria de jogar os dados dentro de uma tabela temporaria, e percorrer essa tabela dentro de um loop ou while!!

 

Isso é possivél??

 

Chama-se cursor.

 

 

http://dev.mysql.com/doc/refman/5.0/en/cursors.html

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.