precisando ajuda em procedure para atualizar saldo na tabela entradas
Ola Pessoal da erro na linha 25 onde esta marcado falou, Precisando de ajuda,
PROCEDURE para atualizar o saldo de um caixa tabela entrada
set term ^
CREATE PROCEDURE SET_SALDO_ENTRADA
(
P_ID_ENTRADA INTEGER,
P_DATA date,
P_VALOR NUMERIC(15,2),
P_TIPO VARCHAR(10),
P_HISTORICO VARCHAR(20),
P_PESSOA VARCHAR(40),
P_SALDO NUMERIC(15,2)
)
AS
declare variable v_saldo_anterior numeric(15,2);
declare variable v_saldoatual numeric(15,2);
declare variable v_lancamento_anterior integer;
begin
/*pega o codigo do lançamento anterior */
select max(E_ENTRADA)
from ENTRADA
where ID_ENTRADA = :P_ID_ENTRADA
into v_lancamento_anterior;
/*se não há lançamento anterior então o saldo é zero */
/*erro na linha 25aqui embaixo não passa daqui se tendo nil ao inves de null não passa da linha 22 */
/*onde se escreve into v_lancamento_anterior; acima */
if (v_lancamento_anterior is null) then
begin
v_saldo_anterior = 0
else
begin
/*pega o saldo do lancamento anterior */
select E_SALDO
from ENTRADA
where codigo = v_lacamento_anterior
into v_saldo_anterior;
end
/*se for nulo muda o valor para zero */
if :v_saldoanterior is null) then
begin
v_saldo_anterior = cloalesce(:v_saldo_anterior,0);
end
*saldo atual */
v_saldo_atual = :v_saldo_anterior + :p_valor;
/*gera um novo lancamento */
insert into ENTRADA (id_entrada,e_data,e_valor,tipo,historico,pessoa,saldo)
values(:p_id_entrada,:p_data,:p_valor,:p_tipo,p:historico,p:pessoa,:v_saldoatual);
end ^
set term; ^
PROCEDURE para atualizar o saldo de um caixa tabela entrada
set term ^
CREATE PROCEDURE SET_SALDO_ENTRADA
(
P_ID_ENTRADA INTEGER,
P_DATA date,
P_VALOR NUMERIC(15,2),
P_TIPO VARCHAR(10),
P_HISTORICO VARCHAR(20),
P_PESSOA VARCHAR(40),
P_SALDO NUMERIC(15,2)
)
AS
declare variable v_saldo_anterior numeric(15,2);
declare variable v_saldoatual numeric(15,2);
declare variable v_lancamento_anterior integer;
begin
/*pega o codigo do lançamento anterior */
select max(E_ENTRADA)
from ENTRADA
where ID_ENTRADA = :P_ID_ENTRADA
into v_lancamento_anterior;
/*se não há lançamento anterior então o saldo é zero */
/*erro na linha 25aqui embaixo não passa daqui se tendo nil ao inves de null não passa da linha 22 */
/*onde se escreve into v_lancamento_anterior; acima */
if (v_lancamento_anterior is null) then
begin
v_saldo_anterior = 0
else
begin
/*pega o saldo do lancamento anterior */
select E_SALDO
from ENTRADA
where codigo = v_lacamento_anterior
into v_saldo_anterior;
end
/*se for nulo muda o valor para zero */
if :v_saldoanterior is null) then
begin
v_saldo_anterior = cloalesce(:v_saldo_anterior,0);
end
*saldo atual */
v_saldo_atual = :v_saldo_anterior + :p_valor;
/*gera um novo lancamento */
insert into ENTRADA (id_entrada,e_data,e_valor,tipo,historico,pessoa,saldo)
values(:p_id_entrada,:p_data,:p_valor,:p_tipo,p:historico,p:pessoa,:v_saldoatual);
end ^
set term; ^
Marcelo Augusto
Curtidas 0
Respostas
Deivison Melo
21/07/2012
Já tentou usar o comparativo = ao invés de is null ?
ficando assim:
PROCEDURE para atualizar o saldo de um caixa tabela entrada
set term ^
CREATE PROCEDURE SET_SALDO_ENTRADA
(
P_ID_ENTRADA INTEGER,
P_DATA date,
P_VALOR NUMERIC(15,2),
P_TIPO VARCHAR(10),
P_HISTORICO VARCHAR(20),
P_PESSOA VARCHAR(40),
P_SALDO NUMERIC(15,2)
)
AS
declare variable v_saldo_anterior numeric(15,2);
declare variable v_saldoatual numeric(15,2);
declare variable v_lancamento_anterior integer;
begin
/*pega o codigo do lançamento anterior */
select max(E_ENTRADA)
from ENTRADA
where ID_ENTRADA = :P_ID_ENTRADA
into v_lancamento_anterior;
/*se não há lançamento anterior então o saldo é zero */
/*erro na linha 25aqui embaixo não passa daqui se tendo nil ao inves de null não passa da linha 22 */
/*onde se escreve into v_lancamento_anterior; acima */
if (v_lancamento_anterior = null) then
begin
v_saldo_anterior = 0
else
begin
/*pega o saldo do lancamento anterior */
select E_SALDO
from ENTRADA
where codigo = v_lacamento_anterior
into v_saldo_anterior;
end
/*se for nulo muda o valor para zero */
if :v_saldoanterior = null) then
begin
v_saldo_anterior = cloalesce(:v_saldo_anterior,0);
end
*saldo atual */
v_saldo_atual = :v_saldo_anterior + :p_valor;
/*gera um novo lancamento */
insert into ENTRADA (id_entrada,e_data,e_valor,tipo,historico,pessoa,saldo)
values(:p_id_entrada,:p_data,:p_valor,:p_tipo,p:historico,p:pessoa,:v_saldoatual);
end ^
set term; ^
ficando assim:
PROCEDURE para atualizar o saldo de um caixa tabela entrada
set term ^
CREATE PROCEDURE SET_SALDO_ENTRADA
(
P_ID_ENTRADA INTEGER,
P_DATA date,
P_VALOR NUMERIC(15,2),
P_TIPO VARCHAR(10),
P_HISTORICO VARCHAR(20),
P_PESSOA VARCHAR(40),
P_SALDO NUMERIC(15,2)
)
AS
declare variable v_saldo_anterior numeric(15,2);
declare variable v_saldoatual numeric(15,2);
declare variable v_lancamento_anterior integer;
begin
/*pega o codigo do lançamento anterior */
select max(E_ENTRADA)
from ENTRADA
where ID_ENTRADA = :P_ID_ENTRADA
into v_lancamento_anterior;
/*se não há lançamento anterior então o saldo é zero */
/*erro na linha 25aqui embaixo não passa daqui se tendo nil ao inves de null não passa da linha 22 */
/*onde se escreve into v_lancamento_anterior; acima */
if (v_lancamento_anterior = null) then
begin
v_saldo_anterior = 0
else
begin
/*pega o saldo do lancamento anterior */
select E_SALDO
from ENTRADA
where codigo = v_lacamento_anterior
into v_saldo_anterior;
end
/*se for nulo muda o valor para zero */
if :v_saldoanterior = null) then
begin
v_saldo_anterior = cloalesce(:v_saldo_anterior,0);
end
*saldo atual */
v_saldo_atual = :v_saldo_anterior + :p_valor;
/*gera um novo lancamento */
insert into ENTRADA (id_entrada,e_data,e_valor,tipo,historico,pessoa,saldo)
values(:p_id_entrada,:p_data,:p_valor,:p_tipo,p:historico,p:pessoa,:v_saldoatual);
end ^
set term; ^
GOSTEI 0