PL / SQL - Procedimentos
Neste capítulo, discutiremos procedimentos em PL / SQL. UMAsubprogramé uma unidade / módulo de programa que executa uma tarefa específica. Esses subprogramas são combinados para formar programas maiores. Isso é basicamente chamado de 'design modular'. Um subprograma pode ser invocado por outro subprograma ou programa que é chamado decalling program.
Um subprograma pode ser criado -
- No nível do esquema
- Dentro de um pacote
- Dentro de um bloco PL / SQL
No nível do esquema, o subprograma é um standalone subprogram. Ele é criado com a instrução CREATE PROCEDURE ou CREATE FUNCTION. Ele é armazenado no banco de dados e pode ser excluído com a instrução DROP PROCEDURE ou DROP FUNCTION.
Um subprograma criado dentro de um pacote é um packaged subprogram. Ele é armazenado no banco de dados e pode ser excluído apenas quando o pacote é excluído com a instrução DROP PACKAGE. Discutiremos os pacotes no capítulo'PL/SQL - Packages'.
Os subprogramas PL / SQL são chamados de blocos PL / SQL que podem ser chamados com um conjunto de parâmetros. PL / SQL fornece dois tipos de subprogramas -
Functions- Esses subprogramas retornam um único valor; usado principalmente para calcular e retornar um valor.
Procedures- Esses subprogramas não retornam um valor diretamente; usado principalmente para executar uma ação.
Este capítulo irá cobrir aspectos importantes de um PL/SQL procedure. Vamos discutirPL/SQL function no próximo capítulo.
Partes de um subprograma PL / SQL
Cada subprograma PL / SQL possui um nome e também pode ter uma lista de parâmetros. Como os blocos PL / SQL anônimos, os blocos nomeados também terão as seguintes três partes -
S.Não | Peças e Descrição |
---|---|
1 | Declarative Part É uma parte opcional. No entanto, a parte declarativa de um subprograma não começa com a palavra-chave DECLARE. Ele contém declarações de tipos, cursores, constantes, variáveis, exceções e subprogramas aninhados. Esses itens são locais para o subprograma e deixam de existir quando o subprograma conclui a execução. |
2 | Executable Part Esta é uma parte obrigatória e contém instruções que executam a ação designada. |
3 | Exception-handling Esta é novamente uma parte opcional. Ele contém o código que trata os erros de tempo de execução. |
Criando um Procedimento
Um procedimento é criado com o CREATE OR REPLACE PROCEDUREdeclaração. A sintaxe simplificada para a instrução CREATE OR REPLACE PROCEDURE é a seguinte -
CREATE [OR REPLACE] PROCEDURE procedure_name
[(parameter_name [IN | OUT | IN OUT] type [, ...])]
{IS | AS}
BEGIN
< procedure_body >
END procedure_name;
Onde,
nome-do-procedimento especifica o nome do procedimento.
A opção [OU REPLACE] permite a modificação de um procedimento existente.
A lista de parâmetros opcional contém nome, modo e tipos de parâmetros. IN representa o valor que será passado de fora e OUT representa o parâmetro que será usado para retornar um valor fora do procedimento.
o corpo do procedimento contém a parte executável.
A palavra-chave AS é usada em vez da palavra-chave IS para criar um procedimento autônomo.
Exemplo
O exemplo a seguir cria um procedimento simples que exibe a string 'Hello World!' na tela quando executado.
CREATE OR REPLACE PROCEDURE greetings
AS
BEGIN
dbms_output.put_line('Hello World!');
END;
/
Quando o código acima é executado usando o prompt SQL, ele produzirá o seguinte resultado -
Procedure created.
Executando um Procedimento Independente
Um procedimento autônomo pode ser chamado de duas maneiras -
Usando o EXECUTE palavra chave
Chamando o nome do procedimento de um bloco PL / SQL
O procedimento acima denominado 'greetings' pode ser chamado com a palavra-chave EXECUTE como -
EXECUTE greetings;
A chamada acima exibirá -
Hello World
PL/SQL procedure successfully completed.
O procedimento também pode ser chamado de outro bloco PL / SQL -
BEGIN
greetings;
END;
/
A chamada acima exibirá -
Hello World
PL/SQL procedure successfully completed.
Excluindo um Procedimento Independente
Um procedimento autônomo é excluído com o DROP PROCEDUREdeclaração. A sintaxe para excluir um procedimento é -
DROP PROCEDURE procedure-name;
Você pode cancelar o procedimento de saudações usando a seguinte instrução -
DROP PROCEDURE greetings;
Modos de parâmetro em subprogramas PL / SQL
A tabela a seguir lista os modos de parâmetro em subprogramas PL / SQL -
S.Não | Modo e descrição do parâmetro |
---|---|
1 | IN Um parâmetro IN permite que você passe um valor para o subprograma. It is a read-only parameter. Dentro do subprograma, um parâmetro IN atua como uma constante. Não pode ser atribuído um valor. Você pode passar uma constante, literal, variável inicializada ou expressão como um parâmetro IN. Você também pode inicializá-lo com um valor padrão; entretanto, nesse caso, ele é omitido da chamada do subprograma.It is the default mode of parameter passing. Parameters are passed by reference. |
2 | OUT Um parâmetro OUT retorna um valor para o programa de chamada. Dentro do subprograma, um parâmetro OUT atua como uma variável. Você pode alterar seu valor e fazer referência ao valor após atribuí-lo.The actual parameter must be variable and it is passed by value. |
3 | IN OUT A IN OUTparâmetro passa um valor inicial para um subprograma e retorna um valor atualizado para o chamador. Pode ser atribuído um valor e o valor pode ser lido. O parâmetro real correspondente a um parâmetro formal IN OUT deve ser uma variável, não uma constante ou uma expressão. O parâmetro formal deve receber um valor.Actual parameter is passed by value. |
Modo IN e OUT Exemplo 1
Este programa encontra o mínimo de dois valores. Aqui, o procedimento pega dois números usando o modo IN e retorna o mínimo usando os parâmetros OUT.
DECLARE
a number;
b number;
c number;
PROCEDURE findMin(x IN number, y IN number, z OUT number) IS
BEGIN
IF x < y THEN
z:= x;
ELSE
z:= y;
END IF;
END;
BEGIN
a:= 23;
b:= 45;
findMin(a, b, c);
dbms_output.put_line(' Minimum of (23, 45) : ' || c);
END;
/
Quando o código acima é executado no prompt SQL, ele produz o seguinte resultado -
Minimum of (23, 45) : 23
PL/SQL procedure successfully completed.
Modo IN e OUT Exemplo 2
Este procedimento calcula o quadrado do valor de um valor passado. Este exemplo mostra como podemos usar o mesmo parâmetro para aceitar um valor e retornar outro resultado.
DECLARE
a number;
PROCEDURE squareNum(x IN OUT number) IS
BEGIN
x := x * x;
END;
BEGIN
a:= 23;
squareNum(a);
dbms_output.put_line(' Square of (23): ' || a);
END;
/
Quando o código acima é executado no prompt SQL, ele produz o seguinte resultado -
Square of (23): 529
PL/SQL procedure successfully completed.
Métodos para passar parâmetros
Os parâmetros reais podem ser passados de três maneiras -
- Notação posicional
- Notação nomeada
- Notação mista
Notação Posicional
Em notação posicional, você pode chamar o procedimento como -
findMin(a, b, c, d);
Na notação posicional, o primeiro parâmetro real é substituído pelo primeiro parâmetro formal; o segundo parâmetro real é substituído pelo segundo parâmetro formal e assim por diante. Então,a é substituído por x, b é substituído por y, c é substituído por z e d é substituído por m.
Notação Nomeada
Na notação nomeada, o parâmetro real é associado ao parâmetro formal usando o arrow symbol ( => ). A chamada de procedimento será como a seguinte -
findMin(x => a, y => b, z => c, m => d);
Notação mista
Em notação mista, você pode misturar ambas as notações na chamada de procedimento; no entanto, a notação posicional deve preceder a notação nomeada.
A seguinte chamada é legal -
findMin(a, b, c, m => d);
No entanto, isso não é legal:
findMin(x => a, b, c, d);