SP For...do dentro de outro For...do amp;#8211; como fazer
Preciso mostrar o seguinte resultado, sem usar tabela temporaria:
Código, descrição, valor cobrado, valor pago.
Sendo que código e descrição estão na tabela 01, Valor cobrado está na tabela 02 e valor Pago na Tabela 03.
Sendo as chave entre as 3 tabelas a coluna código.
O que preciso fazer é o seguinte:
Selecionar todos os registros da tabela 01, passar o código como parâmetro, para o segundo for...do pesquisar na tabela 02 e me retornar o valor cobrado. Depois, passar o código como parâmetro, para o terceiro for...do pesquisar na tabela 03 e me retornar o valor pago. E assim sucessivamente até o final da tabela 01.
No momento consigo fazer isto, utilizando 03 Stored Procedures, quero saber como fazer isso dentro de uma única.
Dentro do Delphi eh fácil, mas preciso em uma Única Stored procedure.
Utilizo o Delphi 7 com Firebird 1.5
Código, descrição, valor cobrado, valor pago.
Sendo que código e descrição estão na tabela 01, Valor cobrado está na tabela 02 e valor Pago na Tabela 03.
Sendo as chave entre as 3 tabelas a coluna código.
O que preciso fazer é o seguinte:
Selecionar todos os registros da tabela 01, passar o código como parâmetro, para o segundo for...do pesquisar na tabela 02 e me retornar o valor cobrado. Depois, passar o código como parâmetro, para o terceiro for...do pesquisar na tabela 03 e me retornar o valor pago. E assim sucessivamente até o final da tabela 01.
No momento consigo fazer isto, utilizando 03 Stored Procedures, quero saber como fazer isso dentro de uma única.
Dentro do Delphi eh fácil, mas preciso em uma Única Stored procedure.
Utilizo o Delphi 7 com Firebird 1.5
Rrsoft
Curtidas 0
Respostas
Gandalf.nho
24/08/2004
Tu pode colocar laços FOR.. DO um dentro do outro numa procedure. Ex:
FOR SELECT campo_nome FROM tabela 1 INTO :nome DO
FOR SELECT campo_chave FROM tabela2 WHERE campo_nome = :nome INTO :chave DO
e assim por diante...
FOR SELECT campo_nome FROM tabela 1 INTO :nome DO
FOR SELECT campo_chave FROM tabela2 WHERE campo_nome = :nome INTO :chave DO
e assim por diante...
GOSTEI 0
Emerson Nascimento
24/08/2004
não seria mais fácil fazer uma única instrução SQL? não sei se entendi direito, mas acho que poderia ser assim:
FOR select T1.Codigo, T1.Descricao, T2.ValorCobrado, T3.ValorPago
from Tabela1 T1
left join Tabela2 T2 on (T2.Codigo = T1.Codigo)
left join Tabela3 T3 on (T3.Codigo = T1.Codigo)
INTO :Codigo, :Descricao, :ValorCobrado, :ValorPago
DO Suspend;
e, particularmente, eu utilizaria somente a instrução. eu não utilizaria uma SP.
FOR select T1.Codigo, T1.Descricao, T2.ValorCobrado, T3.ValorPago
from Tabela1 T1
left join Tabela2 T2 on (T2.Codigo = T1.Codigo)
left join Tabela3 T3 on (T3.Codigo = T1.Codigo)
INTO :Codigo, :Descricao, :ValorCobrado, :ValorPago
DO Suspend;
e, particularmente, eu utilizaria somente a instrução. eu não utilizaria uma SP.
GOSTEI 0