Oracle Procedimento armazenado e funções PL/SQL com exemplos

⚡ Resumo Inteligente

Subprogramas PL/SQL são blocos nomeados, procedimentos e funções, armazenados no banco de dados e chamados por nome. Um procedimento executa um processo e uma função retorna um valor, ambos trocando dados por meio dos parâmetros IN, OUT e IN OUT e da palavra-chave RETURN.

  • 🧩 Dois subprogramas: Procedimentos executam um processo; funções realizam um cálculo e retornam um valor.
  • ???? parâmetros: IN envia a entrada, OUT retorna a saída e IN OUT faz ambas as coisas.
  • ↩️ RETORNA: Retorna o controle para quem chamou a função; em uma função, também retorna um valor de um tipo declarado.
  • 🗄️ Objetos armazenados: Ambos são salvos como objetos de banco de dados e podem ser chamados a partir de outros blocos.
  • 🔎 SELECIONAR Uso: Uma função sem DML pode ser chamada dentro de um SELECT; um procedimento não pode.
  • ⚖️ Diferença chave: Uma função deve retornar um valor, enquanto um procedimento não precisa.
  • 🛠️ Funções integradas: Oracle Funções de conversão de navios, strings e datas prontas para uso.

Oracle Procedimentos e funções armazenadas em PL/SQL

O que são subprogramas PL/SQL?

Neste tutorial, você encontrará uma descrição detalhada de como criar e executar blocos nomeados, procedimentos e funções.

Procedimentos e funções são subprogramas que podem ser criados e salvos no banco de dados como objetos de banco de dados. Eles também podem ser chamados ou referenciados dentro de outros blocos.

Abordamos também as principais diferenças entre esses dois subprogramas e discutimos o Oracle funções integradas.

Terminologias em subprogramas PL/SQL

Antes de aprendermos sobre subprogramas PL/SQL, discutiremos as várias terminologias que fazem parte desses subprogramas.

Parâmetro

Um parâmetro é uma variável ou marcador de posição para qualquer valor válido. Tipo de dados PL/SQL por meio do qual o subprograma PL/SQL troca valores com o código principal. Este parâmetro permite a entrada de dados nos subprogramas e a execução de comandos.tracção de valores deles.

  • Estes parâmetros deverão ser definidos juntamente com os subprogramas no momento da criação.
  • Eles são incluídos na instrução de chamada para interagir com os subprogramas.
  • O tipo de dados do parâmetro no subprograma e na instrução de chamada deve ser o mesmo.
  • O tamanho do tipo de dados não deve ser mencionado no momento da declaração do parâmetro, pois o tamanho é dinâmico.

De acordo com sua finalidade, os parâmetros são classificados como:

  1. Parâmetro IN
  2. Parâmetro FORA
  3. Parâmetro IN OUT

Parâmetro IN

  • Utilizado para fornecer dados de entrada aos subprogramas.
  • Trata-se de uma variável somente leitura dentro dos subprogramas; seu valor não pode ser alterado dentro do subprograma.
  • Na instrução de chamada, pode ser uma variável, um valor literal ou uma expressão, como '5*8' ou 'a/b'.
  • Por padrão, os parâmetros são do tipo IN.

Parâmetro FORA

  • Utilizado para obter a saída dos subprogramas.
  • É uma variável de leitura e escrita dentro dos subprogramas; seu valor pode ser alterado dentro deles.
  • Na instrução de chamada, deve sempre ser uma variável para armazenar o valor do subprograma.

Parâmetro IN OUT

  • Utilizado tanto para fornecer dados de entrada quanto para obter dados de saída dos subprogramas.
  • É uma variável de leitura e escrita dentro dos subprogramas; seu valor pode ser alterado dentro deles.
  • Na instrução de chamada, deve sempre ser uma variável para armazenar o valor do subprograma.

O tipo de parâmetro deve ser mencionado no momento da criação dos subprogramas.

RETORNO

RETURN é a palavra-chave que instrui o compilador a transferir o controle do subprograma para a instrução que o chamou. Em um subprograma, RETURN simplesmente significa que o controle precisa sair do subprograma; assim que o controlador encontra RETURN, o código subsequente é ignorado.

Normalmente, o bloco pai ou principal chama os subprogramas, e o controle passa do bloco pai para o subprograma chamado. A instrução RETURN no subprograma retorna o controle para o bloco pai. No caso de funções, a instrução RETURN também retorna um valor, cujo tipo de dados é especificado no momento da declaração da função.

O que é um procedimento em PL/SQL?

A Procedimento Em PL/SQL, um procedimento é uma unidade de subprograma que consiste em um grupo de instruções PL/SQL que podem ser chamadas por nome. Cada procedimento tem seu próprio nome exclusivo e é armazenado no arquivo de configuração. Oracle banco de dados como um objeto de banco de dados.

Observação: Um subprograma nada mais é do que um procedimento, e precisa ser criado manualmente conforme a necessidade. Uma vez criado, ele é armazenado como um objeto de banco de dados.

As características de uma unidade de subprograma de procedimento em PL/SQL são:

  • Os procedimentos são blocos independentes que podem ser armazenados no banco de dados.
  • Eles podem ser chamados pelo nome para executar as instruções PL/SQL.
  • Eles são usados ​​principalmente para executar um processo.
  • Eles podem ter blocos aninhados ou estar aninhados dentro de outros blocos ou pacotes.
  • Elas contêm uma parte de declaração (opcional), uma parte de execução e uma parte de tratamento de exceções (opcional).
  • Os valores podem ser passados ​​para um procedimento ou obtidos dele por meio de parâmetros.
  • Esses parâmetros devem ser incluídos na instrução de chamada.
  • Um procedimento pode ter uma instrução RETURN para retornar o controle ao bloco que o chamou, mas não pode retornar nenhum valor através de RETURN.
  • Os procedimentos não podem ser chamados diretamente de instruções SELECT; eles podem ser chamados de outro bloco ou através da palavra-chave EXEC.

Sintaxe

CREATE OR REPLACE PROCEDURE
<procedure_name>
(
<parameter1 IN/OUT <datatype>
..
.
)
[ IS | AS ]
<declaration_part>
BEGIN
<execution part>
EXCEPTION
<exception handling part>
END;
  • O comando CREATE PROCEDURE instrui o compilador a criar um novo procedimento. A palavra-chave 'OR REPLACE' instrui-o a substituir o procedimento existente (se houver) pelo procedimento atual.
  • O nome do procedimento deve ser único.
  • A palavra-chave 'IS' é usada quando o procedimento armazenado está aninhado dentro de outro bloco. Se o procedimento for independente, usa-se 'AS'. Além dessa norma de codificação, ambas têm o mesmo significado.

Exemplo 1: Criando um procedimento e chamando-o usando EXEC. Neste exemplo, criamos um Oracle Procedimento que recebe um nome como entrada e imprime uma mensagem de boas-vindas como saída, usando o comando EXEC para chamá-lo.

CREATE OR REPLACE PROCEDURE welcome_msg (p_name IN VARCHAR2)
IS
BEGIN
dbms_output.put_line ('Welcome '|| p_name);
END;
/
EXEC welcome_msg ('Guru99');

Code Explicação:

  • Code linha 1: Criando o procedimento com o nome 'welcome_msg' e um parâmetro 'p_name' do tipo 'IN'.
  • Code linha 4: Imprimindo a mensagem de boas-vindas concatenando o nome inserido.
  • O procedimento foi compilado com sucesso.
  • Code linha 7: Chamando o procedimento usando EXEC com o parâmetro 'Guru99'. O procedimento é executado e imprime “Bem-vindo(a) Guru99".

O que é uma Função?

Uma função é um subprograma PL/SQL independente. Assim como um procedimento, uma função possui um nome único e é armazenada como um objeto de banco de dados PL/SQL. Suas características são:

  • As funções são blocos independentes usados ​​principalmente para cálculos.
  • Uma função utiliza a palavra-chave RETURN para retornar um valor, cujo tipo de dados é definido no momento da sua criação.
  • Uma função deve retornar um valor ou lançar uma exceção; o retorno é obrigatório em funções.
  • Uma função sem instruções DML pode ser chamada diretamente em uma consulta SELECT, enquanto uma função com DML só pode ser chamada a partir de outros blocos PL/SQL.
  • Pode conter blocos aninhados ou estar aninhado dentro de outros blocos ou pacotes.
  • Contém uma parte de declaração (opcional), uma parte de execução e uma parte de tratamento de exceções (opcional).
  • Os valores podem ser passados ​​para a função ou obtidos dela através de parâmetros.
  • Esses parâmetros devem ser incluídos na instrução de chamada.
  • Uma função também pode retornar um valor através de parâmetros OUT, além de usar RETURN.
  • Como sempre retorna um valor, a instrução que a chama sempre usa um operador de atribuição para preencher uma variável.

Estrutura da função PL/SQL

Sintaxe

CREATE OR REPLACE FUNCTION
<function_name>
(
<parameter1 IN/OUT <datatype>
)
RETURN <datatype>
[ IS | AS ]
<declaration_part>
BEGIN
<execution part>
EXCEPTION
<exception handling part>
END;
  • CREATE FUNCTION instrui o compilador a criar uma nova função. 'OR REPLACE' instrui-o a substituir a função existente (se houver) pela função atual.
  • O nome da função deve ser único.
  • O tipo de dados RETURN deve ser mencionado.
  • A palavra-chave 'IS' é usada quando a função está aninhada dentro de outro bloco. Se a função for independente, usa-se 'AS'.

Exemplo 1: Criando uma função e chamando-a usando um bloco anônimo. Neste programa, criamos uma função que recebe um nome como entrada e retorna uma mensagem de boas-vindas, utilizando um bloco anônimo e uma instrução SELECT para chamá-la.

Criar uma função PL/SQL e chamá-la.

CREATE OR REPLACE FUNCTION welcome_msg_func ( p_name IN VARCHAR2) RETURN VARCHAR2
IS
BEGIN
RETURN ('Welcome '|| p_name);
END;
/
DECLARE
lv_msg VARCHAR2(250);
BEGIN
lv_msg := welcome_msg_func ('Guru99');
dbms_output.put_line(lv_msg);
END;
/
SELECT welcome_msg_func('Guru99') FROM DUAL;

Code Explicação:

  • Code linha 1: Criando a função com o nome 'welcome_msg_func' e um parâmetro 'p_name' do tipo 'IN'.
  • Code linha 2: Declarando o tipo de retorno como VARCHAR2.
  • Code linha 5: Retorna o valor concatenado de 'Welcome' e o valor do parâmetro.
  • Code linha 8: Bloco anônimo para chamar a função acima.
  • Code linha 9: Declarar a variável com o mesmo tipo de dados que o tipo de retorno da função.
  • Code linha 11: Chamando a função e armazenando o valor de retorno na variável 'lv_msg'.
  • Code linha 12: Imprimindo o valor da variável. A saída é “Welcome” (Bem-vindo). Guru99".
  • Code linha 14: Chamando a mesma função através de uma instrução SELECT. O valor de retorno é direcionado para a saída padrão.

Semelhanças entre um procedimento e uma função

  • Ambos podem ser chamados de outros blocos PL/SQL.
  • Se uma exceção lançada no subprograma não for tratada em seu tratamento de exceções na seção, ela se propaga para o bloco de chamada.
  • Ambos podem ter quantos parâmetros forem necessários.
  • Ambos são tratados como objetos de banco de dados em PL/SQL.

Procedimento versus função: principais diferenças

Procedimento função
Utilizado principalmente para executar um determinado processo. Utilizado principalmente para realizar alguns cálculos.
Não pode ser chamado em uma instrução SELECT. Uma função que não contém instruções DML pode ser chamada em uma instrução SELECT.
Utiliza um parâmetro OUT para retornar um valor. Utiliza a função RETURN para retornar um valor.
Não é obrigatório retornar um valor. É obrigatório retornar um valor.
RETURN simplesmente encerra o controle do subprograma. RETURN encerra o controle do subprograma e também retorna o valor.
O tipo de dados retornado não é especificado no momento da criação. O tipo de dados de retorno é obrigatório no momento da criação.

Funções integradas em PL/SQL

PL/SQL Contém diversas funções integradas para trabalhar com tipos de dados de string e data. Aqui, veremos as funções mais usadas e como utilizá-las.

Funções de conversão

Essas funções integradas convertem um tipo de dado em outro.

Nome da Função Uso Exemplo
TO_CHAR Converte outro tipo de dados para um tipo de dados de caractere. TO_CHAR(123);
ATÉ_DATA (string, formato) Converte a string fornecida em uma data. A string deve estar no formato especificado. TO_DATE('2015-JAN-15', 'AAAA-SEG-DD'); saída: 1 / 15 / 2015
TO_NUMBER (texto, formato) Converte o texto em um número no formato especificado. Nesse formato, '9' indica a quantidade de dígitos. Selecione TO_NUMBER('1234′,'9999') de dual; saída: 1234. Selecione TO_NUMBER('1,234.45′,'9,999.99') de dual; saída: 1234.45

Funções de String

Essas funções são usadas no tipo de dados caractere.

Nome da Função Uso Exemplo
INSTR(texto, string, início, ocorrência) Retorna a posição de um texto específico na string fornecida. `text` é a string principal, `string` é o texto a ser pesquisado, `start` é a posição inicial (opcional) e `occurrence` é a ocorrência da string pesquisada (opcional). Selecione INSTR('AEROPLANE','E',2,1) de dual; saída2. Selecione INSTR('AEROPLANE','E',2,2) de dual; saída: 9 (2ª ocorrência de E)
SUBSTR (texto, início, comprimento) Retorna o valor da substring da string principal. `text` é a string principal, `start` é a posição inicial e `length` é o comprimento da substring a ser extraída. selecione substr('aeroplane',1,7) de dual; saída: aeropla
SUPERIOR (texto) Retorna o texto fornecido em maiúsculas. Selecione superior('guru99') de dual; saída:GURU99
INFERIOR (texto) Retorna a versão em minúsculas do texto fornecido. Selecione lower('AerOpLane') de dual; saída: avião
INITCAP (texto) Retorna o texto fornecido com a letra inicial de cada palavra em maiúscula. Selecione INITCAP('guru99') de dual; saída: Guru99. Selecione INITCAP('minha história') de dual; saída: Minha história
COMPRIMENTO (texto) Retorna o comprimento da string fornecida. Selecione LENGTH('guru99') de dual; saída: 6
LPAD (texto, comprimento, caractere de preenchimento) Preenche a string à esquerda com o caractere fornecido até atingir o comprimento total especificado. Selecione LPAD('guru99', 10, '$') de dual; saída:$$$$guru99
RPAD (texto, comprimento, pad_char) Preenche a string à direita com o caractere fornecido até atingir o comprimento total especificado. Selecione RPAD('guru99',10,'-') de dual; saída:guru99—-
LTRIM (texto) Remove o espaço em branco inicial do texto. Selecione LTRIM(' Guru99') de dual; saída: Guru99
RTRIM (texto) Remove o espaço em branco à direita do texto. Selecione RTRIM('Guru99 ') de dual; saída: Guru99

Funções de Data

Essas funções são usadas para manipular datas.

Nome da Função Uso Exemplo
ADICIONAR_MESES (data, número de meses) Adiciona os meses especificados à data. ADD_MONTHS('2015-01-01',5); saída: 05 / 01 / 2015
SISTEMA Retorna a data e hora atuais do servidor. Selecione SYSDATE de duplo; saída: 10/4/2015 2:11:43
TRUNC Arredonda a variável de data para o menor valor possível. selecione sysdate, TRUNC(sysdate) de dual; saída: 10/4/2015 2:12:39 PM, 10/4/2015
ROUND Arredonda a data para o limite mais próximo, para cima ou para baixo. Selecione sysdate, ROUND(sysdate) de dual; saída: 10/4/2015 2:14:34 PM, 10/5/2015
MESES_BETWEEN Retorna o número de meses entre duas datas. Selecione MONTHS_BETWEEN (sysdate+60, sysdate) de dual; saída: 2

Perguntas Frequentes

Uma função deve retornar um valor e pode ser usada dentro de uma instrução SELECT se não contiver DML. Um procedimento executa um processo, não precisa retornar um valor e não pode ser chamado a partir de uma instrução SELECT.

A função IN passa um valor somente leitura para o subprograma. A função OUT retorna um valor para o chamador. A função IN OUT faz ambas as coisas, recebendo um valor e retornando um valor possivelmente modificado através do mesmo parâmetro.

Sim, desde que não contenha nenhuma instrução DML, como INSERT, UPDATE ou DELETE. Uma função que executa DML só pode ser chamada de outro bloco PL/SQL, não diretamente dentro de uma consulta.

Sim. A IA pode elaborar um CREATE PROCEDURE ou CREATE FUNCTION com os modos de parâmetro e o tipo de RETURN corretos a partir de uma descrição simples. RevVeja os parâmetros e o tratamento de exceções antes de implantar.

OR REPLACE sobrescreve um procedimento ou função existente com o mesmo nome, sem removê-lo.ping primeiro. Isso mantém as verbas intactas e é a maneira usual de redistribuir um subprograma alterado.

Resuma esta postagem com: