será que alguém pode me ajudar?
create or replace procedure prc_tel (mês in number, ano in number) as
Cursor c_cli is
select aux.cod_cliente,
aux.ano_mês,
aux.ddd_telefone,
aux.num_telefone,
aux.dia_vencimento,
sum (nvl(decode(aux.ddd_telefone_destino, aux.ddd_telefone, aux.tempo),0)) local,
sum (nvl(decode(aux.ddd_telefone_destino, aux.ddd_telefone, 0, aux.tempo),0)) inter,
sum (nvl(decode(aux.ddd_telefone_destino, aux.ddd_telefone, (aux.tempo - 400) * ( select val_minuto
from bd_custo_ddd
where ddd_origem = aux.ddd_telefone
and ddd_destino = aux.ddd_telefone_destino
)
),0)
) val_local,
sum (nvl(decode(aux.ddd_telefone_destino, aux.ddd_telefone, 0, aux.tempo * (
select val_minuto
from bd_custo_ddd
where ddd_origem = aux.ddd_telefone
and ddd_destino = aux.ddd_telefone_destino
)
),0)
) val_inter
from (
select cliente.cod_cliente,
telefones.num_telefone,
telefones.dia_vencimento,
telefones.ddd_telefone,
ligacoes.ano_mês,
ligacoes.ddd_telefone_destino,
sum((ligacoes.dat_termino - ligacoes.dat_inicio) * 24 * 60) tempo
from bd_clientes cliente,
bd_telefones telefones,
bd_ligacoes ligacoes
where cliente.cod_cliente = telefones.cod_cliente
and telefones.ddd_telefone = ligacoes.ddd_telefone
and telefones.num_telefone = ligacoes.num_telefone
and ligacoes.dat_inicio between to_date(telefones.dia_vencimento ||'/' || mês || '/' || ano) and (add_months (to_date(telefones.dia_vencimento ||'/' || mês || '/' || ano),1))
group by cliente.cod_cliente,
telefones.num_telefone,
telefones.dia_vencimento,
telefones.ddd_telefone,
ligacoes.ano_mês,
ligacoes.ddd_telefone_destino
) aux
group by aux.cod_cliente,
aux.ano_mês,
aux.ddd_telefone,
aux.num_telefone,
aux.dia_vencimento;
v_val_local number(11,2);
v_mês number(2);
v_ano number(4);
begin
delete from bd_contas_mensais contas_mensais
where contas_mensais.ano_mês = ano || mês;
v_mês := mês;
v_ano := ano;
for r_cli in c_cli loop
if r_cli.val_local < 0 then
v_val_local := 0;
else
v_val_local := r_cli.val_local;
end if;
if mês = 12 then
v_mês := 1;
v_ano := ano + 1;
else
v_mês := mês + 1;
end if;
insert into bd_contas_mensais ( cod_cliente,
ano_mês,
ddd_telefone,
num_telefone,
tot_minutos_locais,
val_minutos_locais,
tot_minutos_inter,
val_minutos_inter,
dat_vencimento
)
values ( r_cli.cod_cliente,
r_cli.ano_mês,
r_cli.ddd_telefone,
r_cli.num_telefone,
r_cli.local,
v_val_local,
r_cli.inter,
r_cli.val_inter,
to_date (r_cli.dia_vencimento || '/' || v_mês || '/' || v_ano));
End loop ;
commit;
end;
/