Execução de Package com parametro IN/OUT

Scripts Diversos para o Oracle SQL*Plus. (Relacionado a ferramenta Oracle SQL*Plus, para questões de SQL, usar o forum SQL)
Responder
HumbertoJr
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 8
Registrado em: Seg, 19 Set 2005 12:40 pm
Localização: CE

Pessoal,

Gostaria de saber como executo uma package no sql plus de forma que um dos parametros seja do tipo IN/OUT.Por exemplo ,caso os parametros A,B fossem somente IN ,minha package poderia ser executada assim:

Selecionar tudo

exec minhapackage.executa(valor do parametro A,valor do parametro B );

Mas caso haja um terceiro parametro C,que seja o retorno da execução da package e também seja entrada dela,como faço pra executar minha package no SQL Plus por linha de comando?
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

Você pode criar um bloco PL/SQL direto no SQL*Plus que chama sua procedure.
Algo assim:

Selecionar tudo

DECLARE
  VAR NUMBER;
BEGIN
  sua_proc( var );
  dbms_output.put_line ( var );
END;
/

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

Outra forma é usar BIND no SQL*plus. Veja o exemplo:

Selecionar tudo

SQL> VAR
No bind variables declared.
SQL> 
SQL> 
SQL> VAR A NUMBER
SQL> PRINT

        A
---------


SQL> BEGIN 
  2    SELECT 12345 
  3    INTO :A
  4    FROM DUAL;
  5  END;
  6  /

PL/SQL procedure successfully completed.

SQL> PRINT

        A
---------
    12345

SQL> 
HumbertoJr
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 8
Registrado em: Seg, 19 Set 2005 12:40 pm
Localização: CE

CAra valeu pela resposta ,inclusive foram duas!

Mas na segunda resposta ,tu ta só fazendo um select e jogando dentro de uma variavel ,depois manda imprimir o conteudo dessa variavel...mas não enxerguei o que tem haver com o que eu perguntei.

Na primeira resposta ,eu entendi o que tu quis dizer ,mas essa package não é minha,se eu não puder mexer nela ,como se fosse uma "caixa preta" ,eu não tenho permissão pra abrir ela(mexer no codigo) ,como posso executar ela sabendo apenas que todos os parametros dela são IN,mas o ultimo é do tipo IN/OUT?
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

Vamos a um exemplo mais PRATICO.

Selecionar tudo

SQL> 
SQL> create procedure thomas ( vnum in number, vnum2 out number) is
  2  begin
  3    dbms_output.put_line( vnum );
  4    vnum2 := vnum + 10;  --> pego o valor vindo da variavel IN e somo 10.
  5  end;
  6  /

Procedure created.

SQL> set serveroutput on
SQL> 
SQL> declare
  2    yyy number;
  3  begin
  4    -- Passo 1000 na variavel IN. A procedure soma 10 e retorna em yyy.
  5    thomas ( 1000, yyy);
  6    dbms_output.put_line ( yyy );
  7  end;
  8  /
1000
1010

PL/SQL procedure successfully completed.

SQL> 

Já sobre as BINDs, o que eu fiz foi o seguinte. Coloquei um SQL retornando algo pra BIND :a apenas pra mostrar que ela recebe algum valor. Você poderia fazer assim:

Selecionar tudo

SQL> VAR 
No bind variables declared. 
SQL> 
SQL> 
SQL> VAR A NUMBER 
SQL> PRINT 

        A 
--------- 


SQL> BEGIN 
  2      minhapackage.executa(  123,  333,  :a );
  3  END; 
  4  / 

PL/SQL procedure successfully completed. 

SQL> PRINT 

        A 
--------- 
  ******  --> aqui vai o retorno da sua procedure!!!    
SQL> 

Responder
  • Informação
  • Quem está online

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