1. Introdução

Uma stored procedure é um módulo PL/SQL criado com o objetivo de executar uma ou mais ações. Os dois artigos anteriores desta série descreveram a sintaxe para criar procedures sem parâmetros. No entanto, na maior parte das aplicações práticas você precisará criar módulos PL/SQL capazes de se comunicar outro ambiente (ex: .NET, Java, Delphi, PHP) - o ambiente que representa o front end de seu sistema. Essa comunicação é feita através de parâmetros. Por exemplo: o módulo PL/SQL recebe um parâmetro do PHP, processa uma informação e devolve um resultado ao PHP (também através de um parâmetro).

2. Criação de Stored Procedure com parâmetro de entrada (IN)

Neste artigo mostraremos apenas a forma de criar uma procedure que recebe um parâmetro (ou seja, uma procedure com parâmetro de entrada). O código abaixo cria uma procedure PL/SQL chamada “p_milhas_para_km”. Ela recebe como entrada o valor de uma distância em MILHAS e, em seguida, calcular e imprimir o valor equivalente em QUILÔMETROS.

Listagem 1: Stored Procedure “p_milhas_para_km”


    CREATE OR REPLACE PROCEDURE p_milhas_para_km(vMilhas IN NUMBER) IS

    /* -----------------------------------------------------------
    PROCEDURE : p_milhas_para_km
    DESCRIÇÃO : converte valor de distância em milhas para quilômetros
    PARÂMETROS: vMilhas -> ENTRADA. Valor da distância em milhas
    ----------------------------------------------------------- */

    vKm NUMBER; -- receberá valor convertido para km

    BEGIN
    vKm := vMilhas * 1.61;
    DBMS_OUTPUT.PUT_LINE('Distância em milhas: ' || TO_CHAR(vMilhas));
    DBMS_OUTPUT.PUT_LINE('O valor equivalente em km é: ' || TO_CHAR(vKm));

    END p_milhas_para_km;
    /

    

Compile e execute o código no SQL*Plus para visualizar os resultados. Não esqueça de habilitar a saída do console, com SET SERVEROUT ON, como foi mostrado no primeiro artigo.

Listagem 2: Execução de p_milhas_para_km no SQL*Plus


    SQL> EXEC p_milhas_para_km(10);
    Distância em milhas: 10
    O valor equivalente em km é: 16,1

    Procedimento PL/SQL concluído com sucesso.

    SQL>

    

A procedure foi definida com um parâmetro de entrada (read only) chamado “vMilhas”, do tipo NUMBER. A palavra-reservada IN identifica o parâmetro como sendo do tipo “entrada”. Existem também os parâmetros do tipo OUT e do tipo IN OUT (assuntos do próximo artigo). A figura abaixo mostra que uma procedure pode ser definida com muitos parâmetros, bastando dar o nome e o tipo de cada um deles e separar cada especificação usando virgula.

Estrutura da Procedure

Figura 1. Estrutura da Procedure.

A variável “vKm” foi definida na seção de declarações. Esta variável é do tipo NUMBER. Para especificar uma variável em um módulo PL/SQL, é necessário indicar seu nome, seguido do tipo. A linha deve ser finalizada com ponto-e-vírgula. A figura abaixo mostra a forma para declarar diversas variáveis.

Declarando diversas variáveis

Figura 2.Declarando diversas variáveis.

Dentro do corpo principal, a instrução vKm := vMilhas * 1.61; representa o comando que converte o valor da distância em milhas para quilômetros, através de uma operação aritmética. O resultado é armazenado na variável vKm, com o uso do comando de atribuição “ := ”.

Nas linhas seguintes, o comando TO_CHAR é usado para converter os valores das variáveis do tipo NUMBER (“vMilhas” e “vKm”) para CHAR, o que possibilita a concatenação destes valores com as mensagens que são apresentadas ao usuário.

Um abraço e até o próximo artigo