[firebase-br] For Select
RedDevil
reddevil em reddevil.eti.br
Ter Jun 28 13:00:44 -03 2005
ola Adalberto,
quando eu comecei a estudar as stored procedures, eu tambem acabei entrando
nessa que voce entrou...
tipow eu achava que, tomando como exemplo esse que voce postou na lista, o
"suspend" seria necessario para "varrer" toda a tabela, que a cada "suspend"
seria incluido um registro no "insert into...".
entao eu li o que o Mr. Cantu colocou na pagina 208 do seu livro, o Firebird
Essencial, e percebi que, em SP's executaveis, como eh o caso aqui, o que o
"suspend" faz eh encerrar a SP, indo para o END final... e o Mr. Cantu
tambem menciona que nao eh aconselhavel o uso do "suspend" nessas SP's, as
executaveis...
em suma, o que o "suspend" faz eh retornar os valores de saida, em uma
stored procedure selecionavel e suspender a execuçao da SP ate que o proximo
FETCH seja recebido, quando entao ele novamente retorna os valores e
suspende novamente a execuçao da SP, e assim vai, ate que sejam "varridos"
todos os registros especificados no For Select (alguma coisa assim...;o).
entao eu povoei (putz... a alguns dias atras eu escrevi "populei uma
tabela"... o que aconteceu foi que eu estava pensando em uma resposta que a
Helen deu para um cara na lista IBO Support, na qual ela usou o termo
Populate...;o) uma tabela origem com apenas oito registros cujo grupo era
igual a 4, executei essa SP ae abaixo e os oito registros cujo grupo era
igual a 4 foram inseridos na tabela destino...
create procedure xinsert
as
declare variable wcodigo integer;
declare variable wmed varchar(50);
declare variable wgrupo integer;
begin
for select meds.codigo, meds.medicamento, meds.grupo
from medicamentos meds
where (meds.grupo = 4)
into :wcodigo, :wmed, :wgrupo
do
begin
insert into matmeds (codigo, medicamento, grupo)
values (:wcodigo, :wmed, :wgrupo);
end
exit;
end
ou seja, em SP's executaveis nao deve-se usar o "suspend"... apenas em SP's
selecionaveis...
[]s
força sempre.
ate +++
--
Luiz "RedDevil" Stefanski
http://www.RedDevil.eti.br - Delphi Powered by IBObjects
exemplos e dicas sobre o IBObjects:
http://www.firebase.com.br/cgi-bin/firebase.cgi/dnld?ID=165
compilaçao/instalaçao do IBObjects sabor BPG:
http://www.firebase.com.br/cgi-bin/firebase.cgi/artigo?ID=630
----- Original Message -----
From: "Edvaldo (BOL)" <evgomes em bol.com.br>
To: "FireBase" <lista em firebase.com.br>
Sent: Monday, June 27, 2005 10:42 AM
Subject: Re: [firebase-br] For Select
SE VC TIRAR O SUSPEND DE DENTRO DO BEGIN QUEM SABE FUNCIONE ...
EDVALDO
----- Original Message -----
From: "Adalberto Sousa Monteiro" <asm190 em gmail.com>
To: "FireBase" <lista em firebase.com.br>
Sent: Monday, June 27, 2005 10:10 AM
Subject: [firebase-br] For Select
Bom dia a todos, alguem poderia me ajudar com a seguinte duvida.
Montei a procedure abaixo, para que seja chamada pela aplicação para estar
gerando uma movimentação de vendas.
Gostaria de saber como faço para 'varrer' todos os registros retornado pelo
SELECT, dentro da propria de procedure ?
Como faço para a procedure dar o 'insert' de todos os registros ?
Ele so gera um unico registro no insert, e não todos que foram retornados
pelo select.
Desde ja agradeço
Adalberto
For SELECT EXTRACT(YEAR FROM PED.DT_PEDIDO),
EXTRACT(MONTH FROM PED.DT_PEDIDO),
ITEM.CD_FORNECEDOR,
ITEM.CD_PRODUTO,
PED.CD_CLIENTE,
PED.CD_REPRESENTANTE,
SUM((ITEM.QT_VENDA * ITEM.PR_UNITARIO)) VL_TOTVENDABRT,
SUM(ITEM.VL_TOTAL) VL_TOTVENDALIQ,
SUM(ITEM.QT_VENDA) QT_TOTVENDA,
SUM(ITEM.VL_COMISSAO) VL_TOTCOMIS,
SUM(ITEM.VL_DESCONTO) VL_TOTDESC
FROM ITEMPEDIDO ITEM, PEDIDO PED, CLIENTE CLI
WHERE ITEM.NR_PEDIDO = PED.NR_PEDIDO AND
CLI.CD_CLIENTE = PED.CD_CLIENTE
GROUP BY EXTRACT(YEAR FROM PED.DT_PEDIDO),
EXTRACT(MONTH FROM PED.DT_PEDIDO),
ITEM.CD_FORNECEDOR,
ITEM.CD_PRODUTO,
PED.CD_CLIENTE,
PED.CD_REPRESENTANTE
Into :var1, var2, var3 ... etc etc
Do Begin
Insert into ... etc etc etc
Suspend;
End
Mais detalhes sobre a lista de discussão lista