Parametro de saida

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
Avatar do usuário
heraldoaraujo
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 41
Registrado em: Dom, 19 Fev 2012 12:10 pm

Boa tarde turma,

Eu tenho uma procedure que tem um parametro de entrada e dois ou três de saida. Como executar a procedure, pois a mesma dá um erro de numero invalido de argumentos.
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Como está o cabeçalho de sua procedure? Se puder colocar como está e a chamada também ajuda.
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Como o noctífero disse, seria melhor com tua assinatura da procedure.
Agora, suponhamos que você tenha uma procedure que passe 1 parâmetro e receba outros dois, seria mais ou menos isso:

Selecionar tudo

declare 
  vIn   number := 1;
  vret1 number;
  vret2 varchar2(100);
begin
  prc_executa (p1 => vIn     -- IN 
              ,p2 => vret1   -- OUT
              ,p3 => vret2); -- OUT

  -- exibir retorno
  dbms_output.put_line('Retorno 1: '|| to_char(vret1) || ' Retorno 2: '|| vret2 );              
end;

Qualquer coisa, manda pra gente.
Tinho
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 318
Registrado em: Seg, 16 Nov 2009 4:50 pm
Localização: São Paulo - SP

Se não me engano quando você vai executar a sua procedure dentro de um bloco anônimo os parâmetros de saída não são obrigatórios. De qualquer maneira você pode declarar variavéis com o conteúdo nulo e informa-las na chamada da sua procedure. Atente-se para o fato que o Oracle gera o erro de número de argumentos inválidos quando os datatypes declarados estão diferentes dos datatypes atribuídos. Isso eu percebi utilizando a ferramenta PL/Developer versão 7.

Abç.,
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brothers, bom dia.

Mesmo dentro do bloco anônimo (conforme exemplo abaixo no Oracle 10.2.0.1.0), o Oracle não permite parâmetros OUT sendo nulos (ele não permite um "Default Null") nesse tipo de saída:

Selecionar tudo



-- criação 
create or replace procedure prc_lista_valores (pIn in number
                                              ,pOut out varchar2)
is
begin
  pOut := 'Retorno da procedure prc_lista_valores: '||to_char(pIn);
end prc_lista_valores;

-- chamada - sem Out: Erro: PLS-00306 wrong number or types ... 
begin
  prc_lista_valores(pIn => 1);
end;


-- chamada - com Out: OK
declare
  vret varchar2(100); 
begin
  prc_lista_valores(pIn => 2
                   ,pOut => vret);
  dbms_output.put_line('[Retorno:] '||vret);  
  -- Retorna:
  -- [Retorno:] Retorno da procedure prc_lista_valores: 2                 
end;

Qualquer coisa, manda pra gente.
Abraço,
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 8 visitantes