Array
(
)

Problemas na execução da query

@julio
   - 17 jul 2004

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 )

Marcus.magalhaes
   - 19 jul 2004

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 :

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