[Dúvida] Erro PLS-00394

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
lucianoo
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 4
Registrado em: Qua, 01 Dez 2010 9:35 am
Localização: Vila Velha - ES

Olá boa tarde,
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 :

Selecionar tudo

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;
Desde já agradeço pela atenção pessoal!
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Seu cursor ta buscando 2 campos:

Selecionar tudo

select tb2.cd_produto,
       tb2.vl_custo_medio
.
.
.
Mas seu FETCH só tem uma variável.

Selecionar tudo

fetch c_vlCustoMedio into v_vl_custo_medio;
Por isso o erro!
lucianoo
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 4
Registrado em: Qua, 01 Dez 2010 9:35 am
Localização: Vila Velha - ES

Putz, não estava conseguindo interpretar o erro :oops:
dr_gori muito obrigado pela atenção, problema resolvido.
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

:-o :-o :-o
Responder
  • Informação