Procedure

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
Marlon Jardel
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 11
Registrado em: Sex, 23 Jul 2010 10:18 am
Localização: Igrejinha RS
Marlon Jardel

Alguém pode me dar uma dica.
Como eu faço para executar uma procedure dentro de outra e retornar os registros dessa procedure que foi chamada para a procedure que chama?


desde já agradeço a atenção.
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

Avatar do usuário
fsitja
Rank: OraSauro
Rank: OraSauro
Mensagens: 611
Registrado em: Seg, 19 Jan 2009 4:29 pm
Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html

OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist

Me parece que você quer algo como usar REF CURSOR como parâmetro de saída da procedure.

Posta um pouco mais de informação sobre o problema, aquilo que você precisa solucionar, em vez da solução que você pensou. Talvez dê para repensar a solução de forma mais simples, olhando de outro ângulo.
Marlon Jardel
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 11
Registrado em: Sex, 23 Jul 2010 10:18 am
Localização: Igrejinha RS
Marlon Jardel

a procedure é + ou - assim.

Selecionar tudo

create procedure X(p1,p2)
 variaveis
begin
...
...
...
executar procedure_chamada(P1,P2);
retornar valor;

...
...
 
end;
SergioLBJr
Rank: Oracle Guru
Rank: Oracle Guru
Mensagens: 448
Registrado em: Ter, 16 Jun 2009 3:07 pm
Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS

[]s

Tu só precisa que a tua procedure de chamada possua um parametro do tipo OUT.
Dae o campo que tu passar nesse parametro vai retornar o que tu desejares da procedure.

Um exemplo :

Selecionar tudo

create procedure chamada(p1 in number,p2 out boolean) is
begin
  if p1 = 1 then
    p2:= true;
  else
    p2 := false;
  end if;
end;

Marlon Jardel
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 11
Registrado em: Sex, 23 Jul 2010 10:18 am
Localização: Igrejinha RS
Marlon Jardel

sim, mas qual é o comando que utilizo para chamar essa procedure, eu criei ela com 4 parametros, 3 deles são in (de entrada) e 1 out(de saida)
estou executando ela da seguinte forma:

Selecionar tudo

nome_procedure(p1,p2,p3);
esses são os parâmetros de entrada, agora eu quero jogar dentro de uma variável em outra procedure o parâmetro de saída. como faço isso.


ao chamar a procedure da forma que eu coloquei acima, ela acusa um erro:
Número incorreto de tipos de argumentos na chamada para nome_procedure.
Marlon Jardel
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 11
Registrado em: Sex, 23 Jul 2010 10:18 am
Localização: Igrejinha RS
Marlon Jardel

Obrigado pela ajuda pessoal.
Encontrei um outro tópico no fórum que resolveu o meu problema

http://glufke.net/oracle/viewtopic.php? ... metros+out

ao passar os parâmetros para a procedure, eu devo informar os parâmetros de entrada e uma variável que receberá o valor de saída da procedure.
EX:

Selecionar tudo

nome_procedure(entrada1,entrada2,entrada3,variavel_que_recebe_saida) ;
Obrigado pela atenção de todos.
Avatar do usuário
gpilger
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 29
Registrado em: Qua, 21 Abr 2010 3:34 pm
Localização: Novo Hamburgo - RS
Gilson Pilger
"Por não saber que erra impossível, ele foi lá e fez" autor desconhecido

Para chamar uma procedure dentro de outro basta declarar a procedure interna no seção "declare" do bloco PL/SQL.

Exemplo:

Selecionar tudo


create or replace procedure prc_externa (pA in, pB in) is

declare
  
  -- Minha procedure interna
  procedure  prc_interna(p1 in, p2 out) is

  begin
    aqui vai meu código;
  end prc_interna;

  var_out varchar2(10);
 
begin

  -- aqui chamo minha proc interna
  prc_interna('valor 1',var_out);  

end prc_externa;
Responder
  • Informação
  • Quem está online

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