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,
*******************************************************
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
Curtir tópico
+ 0
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
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
Clique aqui para fazer login e interagir na Comunidade :)