PLS-00306: wrong number or types of arguments in call

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
joaoluizbt
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 37
Registrado em: Qui, 05 Mai 2011 3:53 pm
Localização: Rio de Janeiro

Olá,

eu tive este erro tentando executar uma procedure.

Selecionar tudo

ORA-06550: line 2, column 1:
PLS-00306: wrong number or types of arguments in call to 'PROC_EC2_VALOR_A_PAGAR'
ORA-06550: line 2, column 1:
PL/SQL: Statement ignored
o negócio é o seguinte:
eu pego o valor retornado de uma view e diminuo do valor que eu pego somando varios valores em outra tabela.
o problema é que eu preciso passar uma string como parametro. e não consigo fazer isso numa view, então eu criei uma procedure, mas quando eu executo, tenho o erro acima. é estranho pois eu declarei como varchar e passo o valor entre aspas simples... por que continua falando que o tipo está errado?

segue o codigo para verificarem:

Selecionar tudo

CREATE OR REPLACE PROCEDURE PROC_1
(p_PDV IN VARCHAR2,
 p_valor_a_pagar out number)
AS
BEGIN
select (deflacionado.deflacionado - pagamento.soma_paga) as valor_a_pagar into p_valor_a_pagar
from (select cod_dealer, sum(valor) as soma_paga from controle where cod_dealer = p_PDV and data_criacao between '01/04/2010' and '30/04/2011') pagamento,
(SELECT valor_deflacionado as deflacionado FROM VW_EC2_VL_NOMINAL_DEFLACIONADO WHERE pdv = p_PDV) deflacionado;
END;
e para executar eu uso:

Selecionar tudo

BEGIN
PROC_1('123456');
END;
gfkauer
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 389
Registrado em: Ter, 27 Jul 2010 1:34 pm
Localização: Sapiranga - RS
Contato:
Quem falou que programar era fácil??

Quanto mais dificil for a implementação mais valorizado seu trabalho será!

Acessem: www.gfkauer.com.br

na chamada da procedure você precisa dizer para qual variavel o valor deretorno irá.

Selecionar tudo

PROC_1('123456', V_RETORNO); 
joaoluizbt
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 37
Registrado em: Qui, 05 Mai 2011 3:53 pm
Localização: Rio de Janeiro

Obrigado pela resposta rápida,

mas tipo assim...
na verdade eu vou utilizar o comando para vizualizar somente o valor retornado... este valor não vai para variavel nenhuma.
é como o retorno de um select que aparece a coluna "valor" (por exemplo) e logo abaixo o valor apurado pela procedure.

eu preciso definir um parametro de retorno ou não é necessário?
como eu exibo isso como se fosse um select?
eu criei a procedure porque a variavel que eu passo tem que ser utilizada na view dentro da procedure e no select que soma os valores, por isso fiz uma procedure... mas eu queria pegar isse calculo todo e simplesmente exibir na tela.

consigo com a procedure?

Mais uma vez, muito obrigado.
gfkauer
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 389
Registrado em: Ter, 27 Jul 2010 1:34 pm
Localização: Sapiranga - RS
Contato:
Quem falou que programar era fácil??

Quanto mais dificil for a implementação mais valorizado seu trabalho será!

Acessem: www.gfkauer.com.br

destrua a procedure e crie uma função mais ou menos assim:

Selecionar tudo

Create Or Replace Function proc_1(p_pdv In Varchar2) Return Number Is
  p_valor_a_pagar Number;
Begin
  Select (deflacionado.deflacionado - pagamento.soma_paga) As valor_a_pagar
    Into p_valor_a_pagar
    From (Select cod_dealer,
                 Sum(valor) As soma_paga
            From controle
           Where cod_dealer = p_pdv
             And data_criacao Between '01/04/2010' And '30/04/2011') pagamento,
         (Select valor_deflacionado As deflacionado
            From vw_ec2_vl_nominal_deflacionado
           Where pdv = p_pdv) deflacionado;
  Return p_valor_a_pagar;
End;
dai você faz a chamada como queria inicialmente.
joaoluizbt
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 37
Registrado em: Qui, 05 Mai 2011 3:53 pm
Localização: Rio de Janeiro

Olá,

eu compilei a função, e tentei executar, mas tive um erro ainda.

Selecionar tudo

ORA-06550: line 2, column 1:
PLS-00221: 'FNCT_EC2_VALOR_A_PAGAR' is not a procedure or is undefined
ORA-06550: line 2, column 1:
PL/SQL: Statement ignored
eu tentei executar assim:

Selecionar tudo

BEGIN
FNCT_EC2_VALOR_A_PAGAR('1010235');
END;
não é assim que executa funçao?
joaoluizbt
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 37
Registrado em: Qui, 05 Mai 2011 3:53 pm
Localização: Rio de Janeiro

Olá,

consegui com o select:

Selecionar tudo

select FNCT_EC2_VALOR_A_PAGAR('1010235','01/04/2010','30/04/2011') as valor_a_pagar from dual
adicionei dois parametros de data para pegar um periodo especifico.

muito obrigado pela ajuda.

podem fechar este post.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante