Problemas na execução da query

17/07/2004

0

Ai galera, to tentando rodar esta query que é base par uma procedure, mas ela não roda e não sei porque. Se alguem souber onde esta o erro, por favor, ja estou em panico. :D


create table tblFluxoCaixaTmp
(FcxData datetime,
PagValorDoc float,
RecValorDoc float)

create table tblFluxoCaixaPagTmp
(FcxDataPag datetime,
ValorDocPag float)

GO
DECLARE fluxo_cursor CURSOR FOR
select *
from tblFluxoCaixaPagTmp

OPEN fluxo_cursor

-- Coloca o cusor na primeira linha.
FETCH NEXT FROM fluxo_cursor

declare @DataPag DateTime,
@ValorPag Float
-- Verifica @@FETCH_STATUS se existem mais linhas para processar.
WHILE @@FETCH_STATUS = 0
BEGIN
set @DataPag = tblFluxoCaixaPagTmp.FcxDataPag
set @ValorPag = tblFluxoCaixaPagTmp.ValorDocPag
If (select count(tblFluxoCaixaTmp.FcxData)
from tblFluxoCaixaTmp, tblFluxoCaixaPagTmp
where tblFluxoCaixaTmp.FcxData = @DataPag )
= 0
begin
insert into tblFluxoCaixaTmp
(FcxData, PagValorDoc)
values( @DataPag,@ValorPag)

end
else
begin
update tblFluxoCaixaTmp
set PagValorDoc = @ValorPag
end
-- Avança o cursor para a proxima linha.
FETCH NEXT FROM fluxo_cursor
END

CLOSE fluxo_cursor
DEALLOCATE fluxo_cursor

select * from tblFluxoCaixaTmp
order by FcxData
GO


@julio

@julio

Responder

Posts

19/07/2004

Marcus.magalhaes

Bom dia Julio,

seu cursor está errado, mais precisamente o FETCH.

Segue como deve ser:

Antes do Fetch vc precisa declarar as variáveis que vão receber o conteúdo do Fetch

Declare @var_FcxDataPagdatetime,
@var_ValorDocPagfloat

Agora o Fetch é assim :

FETCH NEXT FROM fluxo_cursor Into @var_FcxDataPag, @var_ValorDocPag

E para finalizar :

Vc não faz isso, é errado :
set @DataPag = tblFluxoCaixaPagTmp.FcxDataPag
set @ValorPag = tblFluxoCaixaPagTmp.ValorDocPag

Então seu código certo fica assim :

[b:3ad531b466][color=green:3ad531b466]create table tblFluxoCaixaTmp
(
FcxData datetime,
PagValorDoc float,
RecValorDoc float
)
GO

create table tblFluxoCaixaPagTmp
(
FcxDataPag datetime,
ValorDocPag float
)
GO

Declare @var_FcxDataPagdatetime,
@var_ValorDocPagfloat


DECLARE fluxo_cursor CURSOR FOR select FcxDataPag, ValorDocPag from tblFluxoCaixaPagTmp

OPEN fluxo_cursor

-- Coloca o cusor na primeira linha.
FETCH NEXT FROM fluxo_cursor Into @var_FcxDataPag, @var_ValorDocPag

declare @DataPag DateTime,
@ValorPag Float
-- Verifica @@FETCH_STATUS se existem mais linhas para processar.
WHILE @@FETCH_STATUS = 0
BEGIN
If (select count(tblFluxoCaixaTmp.FcxData) from tblFluxoCaixaTmp, tblFluxoCaixaPagTmp where tblFluxoCaixaTmp.FcxData = @DataPag ) = 0
begin
insert into tblFluxoCaixaTmp(FcxData, PagValorDoc) values
(@var_FcxDataPag, @var_ValorDocPag)

end
else
begin
update tblFluxoCaixaTmp
set PagValorDoc = @var_FcxDataPag
end
-- Avança o cursor para a proxima linha.
FETCH NEXT FROM fluxo_cursor Into @var_FcxDataPag, @var_ValorDocPag
END

CLOSE fluxo_cursor
DEALLOCATE fluxo_cursor

select * from tblFluxoCaixaTmp
order by FcxData
GO [/color:3ad531b466][/b:3ad531b466]


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar