[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