1. Introdução

Os parâmetros de saída são utilizados pelas procedures para que o aplicativo que a chamou possa obter as informações computadas pela mesma - seja esse aplicativo o SQL*Plus ou um programa desenvolvido em qualquer linguagem, como PHP, Delphi, Java, etc. A palavra chave OUT é utilizada para indicar à linguagem PL/SQL que o parâmetro é direcionado para saída.

Artigo: Estrutura

2. Criação de Stored Procedure com parâmetro de saída (OUT)

O código abaixo cria uma procedure PL/SQL chamada “p_esfera” que recebe o raio de uma esfera em um parâmetro de entrada, computa o volume da mesma e retornar este valor computado em um parâmetro de saída.

Listagem 1: Stored Procedure “p_esfera”


CREATE OR REPLACE PROCEDURE p_esfera(r IN NUMBER, 
                                     V OUT NUMBER) IS

/* -----------------------------------------------------------
   PROCEDURE : p_esfera
   DESCRIÇÃO : recebe como entrada o raio de uma esfera e retorna
               o volume na saída.
   PARÂMETROS: r -> ENTRADA. Valor do raio da esfera
               V -> SAÍDA. Volume calculado da esfera 
   ----------------------------------------------------------- */


PI CONSTANT NUMBER := 3.14;  -- declaração da constante “PI”

BEGIN 

  -- volume da esfera: 4/3 * pi * r ao cubo
  V := 4 / 3 * PI * (r * r * r); 

END p_esfera;
/

Note que a criação de um procedimento com parâmetro de saída não apresenta nenhuma novidade, excetuando o uso da palavra reservada OUT. No entanto, a execução da procedure no SQL*Plus requer um passo adicional. É preciso executá-la através do que chamamos de “bloco anônimo de código PL/SQL”.

Um bloco anônimo é um trecho livre de código digitado no SQL*Plus que não é transformado em procedimento ou função e que, por isso, não fica gravado em banco (ele “morre” logo após ser executado). O bloco anônimo é normalmente utilizado apenas quando queremos testar um programa via SQL*Plus.

A seguir apresenta-se um exemplo de bloco anônimo para o teste de nossa procedure “p_esfera”. Inicialmente é preciso usar o comando DECLARE para especificarmos as variáveis que serão utilizadas como parâmetros de entrada e saída da procedure. Em seguida, a chamada do procedimento e a impressão do conteúdo das variáveis é realizada dentro de um bloco delimitado por BEGIN e END.

Listagem 2: Execução de “p_esfera” no SQL*Plus



DECLARE 
   vRaio   NUMBER;
   vVolume NUMBER;

BEGIN
    
    vRaio := 10;

    p_esfera(vRaio,vVolume); -- chamada da procedure
    
    -- imprime o conteúdo das variáveis 
    DBMS_OUTPUT.PUT_LINE('Raio e Volume da Esfera:');
    DBMS_OUTPUT.PUT_LINE(vRaio);
    DBMS_OUTPUT.PUT_LINE(vVolume);
END;
/

Raio e Volume da Esfera:
10
4186,66666666666666666666666666666666666

Procedimento PL/SQL concluído com sucesso.

SQL>

Um bloco anônimo de código PL/SQL é um recurso usado no SQL*Plus quase sempre com a finalidade de fazer teste e depuração de programas PL/SQL. Ele não fica armazenado no banco.

Ambientes de programação como .NET, Java, PHP e outras, utilizam componentes de software para possibilitar a execução de stored procedures. Estes componentes oferecem opções para a configuração de parâmetros de entrada e saída (ex: um parâmetro de saída retornado pelo Oracle é automaticamente associado a uma variável .NET).

Bom assim finalizo este artigo, um abraço e até o próximo