Problemas na execução da query
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
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
Curtidas 0
Respostas
Marcus.magalhaes
17/07/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 :
[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]
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]
GOSTEI 0