[firebase-br] procedure em loop

Antônio Gomes acgomes2001 em yahoo.com.br
Qua Set 3 12:52:29 -03 2008


Ow... se vc tem na tabela tudo temporaria os produtos pq vc nao faz um for
loop e vai dando suspend se o cliente for diferente ? Ah lembrar de ordenar
pelo cliente e pela quantidade do menor para o maior , assim quando o
cliente for diferente vai sempre trocar e na primeira passada será o menor,
pelo fato de estar ordenado.

Seria algo assim:

WCLIENTEANT = -1;


        for select t.produto, p.descricao, p.marca, sum(t.quantidade),
t.cliente
                  from temporaria t, produto p
                  where t.computador = :Computador AND
                        t.produto = p.produto
                  group by t.produto, p.descricao, p.marca, t.cliente

ORDER BY 4

                  into :Produto, :descricao, :marca, :wQuantidade, wCliente
do
            BEGIN
               delete from temporaria
                    where computador = :computador AND
                          produto = :produto;
if (:WCLIENTANT <> :wCliente then
begin
               suspend;
               WCLIENTANT = :wCliente;
end
            end

Pela logica vai ficar rodando até o cliente  ser diferente....


-- 
_____________________________________________
Antônio Cristóvão Gomes
Tek-System Informática Ltda.
Desenvolvimento de Software
Tel: (32) 3531-5787 Cel: (32) 9104-2963
_____________________________________________

"samuel ferreira" 
<samuel.peres.ferreira em gmail.com> escreveu na 
mensagem news:f76206770809020721n474a51fbs321ee504e6d0158 em mail.gmail.com...
ola

uso o fb 2.1. necessito fazer uma procedure para gerar um relatorio de
producao. tem q sair em ordem de produtos q atendam os clientes q pediram
menos produtos. entao fiz a logica abaixo, criando uma 'tabela temporaria'.
esta entrando em loop, ai tenho dar um 'stop' no fb.

se alguem puder dar uma olhada na logica, eu agradeco


samuel


ALTER PROCEDURE SPRETORNAPRODUCAO (
    COMPUTADOR Varchar(15),
    DATAINICIAL Date,
    DATAFINAL Date )
RETURNS (
    PRODUTO Integer,
    DESCRICAO Varchar(50),
    MARCA Varchar(15),
    QUANTIDADE Numeric(12,0) )
AS
declare wcliente numeric(6);
declare wFaz numeric(1);
declare wQuantidade numeric(15,6);
declare wTransformacao numeric(6);
declare wProduto numeric(6);

.
.
.
.  o loop esta na logica abaixo
.

   wFaz = 1;
   while (wFaz = 1) do
      begin
         select first 1 cliente, count(*) from temporaria
                    where computador = :computador
                    group by CLIENTE
                    order by 2
                    into :wCliente, :wQuantidade;
        if (:wQuantidade is null) THEN
           wQuantidade = 0;
        if (wQuantidade = 0) THEN
           BEGIN
              wFaz = 0;
              break;
           end
        for select t.produto, p.descricao, p.marca, sum(t.quantidade)
                  from temporaria t, produto p
                  where t.cliente = :wCliente AND
                        t.computador = :Computador AND
                        t.produto = p.produto
                  group by t.produto, p.descricao, p.marca
                  into :Produto, :descricao, :marca, :wQuantidade do
            BEGIN
               delete from temporaria
                    where computador = :computador AND
                          produto = :produto;
               suspend;
            end
       end
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para saber como gerenciar/excluir seu cadastro na lista, use: 
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa







Mais detalhes sobre a lista de discussão lista