Estou criando um function com um cursor para me trazer um valor especifico.
Existem dois parâmetros : Código de produto (p_cd_produto) e Data de competência (p_dt_comp).
É feito um consulta para trazer o maior valor do custo médio do produto de acordo com o os parâmetros.
Após criar a function e verificar a mesma tenho o Erro do Oracle PLS-00394
Descrição do erro: Número incorreto de valores na lista INTO de uma instrução FETCH
Erro Causa: O número de variáveis na cláusula INTO de uma instrução FETCH não corresponde ao número de colunas na declaração do cursor.
Ação: Altere o número de variáveis na cláusula INTO ou o número de colunas na declaração do cursor para que os números correspondam.
Não estou conseguindo encontrar o que posso estar fazendo para a função funcione corretamente.
Segue código :
create or replace function busca_vlCustoMedio
(p_cd_produto in number,
p_dt_comp in varchar2)
return number is
/*********************************
Objetivo:
Retornar o valor do custo médio do produto
Parametros:
p_cd_produto..: Código do produto
p_dt_comp.....: Competencia
Resumo:
De acordo com o produto e a data de competencia, a
query ira trazer o valor correto do custo médio.
*********************************/
cursor c_vlCustoMedio is
-- inicio consulta
select tb2.cd_produto,
tb2.vl_custo_medio
from (
select tb1.cd_produto,
max(tb1.dt_custo) mx_dt,
tb1.vl_custo_medio
from (
select custo_medio . cd_produto cd_produto,
produto . ds_produto ds_produto,
to_date(custo_medio . dt_custo, 'dd/mm/yyyy') dt_custo,
to_char(custo_medio . dt_custo, 'mm/yyyy') comp,
custo_medio . vl_custo_medio_antes * verif_vl_fator_prod(produto . cd_produto) vl_custo_medio_antes,
custo_medio . vl_custo_medio * verif_vl_fator_prod(produto . cd_produto) vl_custo_medio,
verif_cd_unid_prod(produto . cd_produto) cd_unidade,
verif_ds_unid_prod(produto . cd_produto) ds_unidade
from custo_medio custo_medio,
produto produto,
especie especie,
classe classe,
sub_clas sub_clas
where custo_medio.cd_produto = produto.cd_produto
and produto.cd_sub_cla = sub_clas.cd_sub_cla
and produto.cd_classe = sub_clas.cd_classe
and produto.cd_especie = sub_clas.cd_especie
and sub_clas.cd_classe = classe.cd_classe
and sub_clas.cd_especie = classe.cd_especie
and classe.cd_especie = especie.cd_especie
and (qt_entrada || sn_atualiza_preço || sn_contagem <> '0NN')
and custo_medio.cd_produto = p_cd_produto -- pametro do Código do produto
and to_char(custo_medio . dt_custo, 'mm/yyyy') = p_dt_comp -- parametro para o periodo
)tb1
group by tb1.cd_produto,
tb1.vl_custo_medio
) tb2
where rownum = 1
order by mx_dt desc
-- final de consulta
;
v_vl_custo_medio number;
begin
open c_vlCustoMedio;
fetch c_vlCustoMedio into v_vl_custo_medio;
close c_vlCustoMedio;
return v_vl_custo_medio;
end;