Fórum Store Procedure (iniciante) #37395

15/07/2003

0

Fiz a seguinte SP:

*******************************************************
CREATE PROCEDURE CBDIAMOV_SALDO_FINAL (
PAR_COD_ESTAB INTEGER,
PAR_BASE_MONETARIA INTEGER,
PAR_DATA_REF DATE,
PAR_CONTA_CONTABIL_INI VARCHAR(17) CHARACTER SET NONE,
PAR_CONTA_CONTABIL_FIM VARCHAR(17) CHARACTER SET NONE)
RETURNS (
RET_COD_ESTAB INTEGER,
RET_BASE_MONETARIA INTEGER,
RET_DATA_REF DATE,
RET_CONTA_CONTABIL VARCHAR(17) CHARACTER SET NONE,
RET_CENTRO_CUSTO INTEGER,
RET_TOT_DEBITO FLOAT,
RET_TOT_CREDITO FLOAT,
RET_DIFERENCA FLOAT,
RET_ULT_LANCTO INTEGER,
RET_SALDO_INICIAL FLOAT,
RET_SALDO_ATUAL FLOAT)
AS
DECLARE VARIABLE VAR_TDATA_REF DATE;
DECLARE VARIABLE VAR_TCONTA_CONTABIL VARCHAR(17);
DECLARE VARIABLE VAR_TCENTRO_CUSTO INTEGER;
DECLARE VARIABLE VAR_SDATA_REF DATE;
DECLARE VARIABLE VAR_SCONTA_CONTABIL VARCHAR(17);
DECLARE VARIABLE VAR_SCENTRO_CUSTO INTEGER;

begin
var_tdata_ref = null;
var_tconta_contabil = ´´;
var_tcentro_custo = 0;

var_sdata_ref = null;
var_sconta_contabil = ´´;
var_scentro_custo = 0;

for select data_ref,conta_contabil,centro_custo
from cbdiamov
where cod_estab = :par_cod_estab and
base_monetaria = :par_base_monetaria and
data_ref <= :par_data_ref and
conta_contabil >= :par_conta_contabil_ini and
conta_contabil <= :par_conta_contabil_fim
order by conta_contabil,data_ref desc
into :var_sdata_ref,:var_sconta_contabil,:var_scentro_custo do begin

if ((var_tconta_contabil <> var_sconta_contabil) and (var_tcentro_custo <> var_scentro_custo)) then begin
select cod_estab,base_monetaria,data_ref,conta_contabil,centro_custo,tot_debito,tot_credito,diferenca,ult_lancto,saldo_inicial,saldo_atual
from cbdiamov
where cod_estab = :par_cod_estab and
base_monetaria = :par_base_monetaria and
data_ref = :var_sdata_ref and
conta_contabil = :var_sconta_contabil and
centro_custo = :var_scentro_custo
order by conta_contabil,centro_custo
into :ret_cod_estab,:ret_base_monetaria,:ret_data_ref,:ret_conta_contabil,:ret_centro_custo,:ret_tot_debito,:ret_tot_credito,:ret_diferenca,:ret_ult_lancto,:ret_saldo_inicial,:ret_saldo_atual;
end

var_tdata_ref = var_sdata_ref;
var_tconta_contabil = var_sconta_contabil;
var_tcentro_custo = var_scentro_custo;

var_sdata_ref = null;
var_sconta_contabil = ´´;
var_scentro_custo = 0;

suspend;
end
end

*******************************************************

Já testei o primeiro Select (o que está no for) e ele está trazendo o que eu esperava. Testei o segundo select e tb. trouxe o que eu esperava. Agora, minha intenção é que ele resulte os dados do segundo select. Mas ele não está fazendo isso. Ele está resultando 9 registos nulos (s/ nenhum dados em nenhum campo) - sendo que 9 é justamente a quantia de registros que o primeiro select seleciona.

Alguém consegue entender onde estou errando???

Grata,


Renata

Renata

Responder

Posts

15/07/2003

Afarias

A princípio, das 2 uma:

1) o if abaixo sempre é FALSO

if ((var_tconta_contabil <> var_sconta_contabil) and (var_tcentro_custo <> var_scentro_custo)) then

ou

2) o select abaixo não retorna NADA

select cod_estab,base_monetaria,data_ref,conta_contabil,centro_custo,tot_debito,tot_credito,diferenca,ult_lancto,saldo_inicial,saldo_atual
from cbdiamov
where cod_estab = :par_cod_estab and
base_monetaria = :par_base_monetaria and
data_ref = :var_sdata_ref and
conta_contabil = :var_sconta_contabil and
centro_custo = :var_scentro_custo
order by conta_contabil,centro_custo
into :ret_cod_estab,:ret_base_monetaria,:ret_data_ref,:ret_conta_contabil,:ret_centro_custo,:ret_tot_debito,:ret_tot_credito,:ret_diferenca,:ret_ult_lancto,:ret_saldo_inicial,:ret_saldo_atual;


Abraço


Responder

Gostei + 0

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

Aceitar