Oracle PL / SQL Stored Procedure & Funções com exemplos

Índice:

Anonim

Neste tutorial, você verá a descrição detalhada de como criar e executar os blocos nomeados (procedimentos e funções).

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

Além disso, cobriremos as principais diferenças entre esses dois subprogramas. Além disso, discutiremos as funções integradas do Oracle.

Neste tutorial do Oracle Stored Procedure, você aprenderá-

  • Terminologias em subprogramas PL / SQL
  • O que é procedimento em PL / SQL?
  • O que é função?
  • Semelhanças entre procedimento e função
  • Procedimento vs. Função: Principais diferenças
  • Funções integradas em PL / SQL

Terminologias em subprogramas PL / SQL

Antes de aprendermos sobre os subprogramas PL / SQL, discutiremos as várias terminologias que fazem parte desses subprogramas. Abaixo estão as terminologias que iremos discutir.

Parâmetro:

O parâmetro é uma variável ou espaço reservado para qualquer tipo de dados PL / SQL válido por meio do qual o subprograma PL / SQL troca os valores com o código principal. Este parâmetro permite fornecer dados aos subprogramas e extrair deles.

  • Esses parâmetros devem ser definidos junto com os subprogramas no momento da criação.
  • Esses parâmetros são incluídos na instrução de chamada desses subprogramas para interagir os valores com os subprogramas.
  • O tipo de dados do parâmetro no subprograma e a instrução de chamada devem ser os mesmos.
  • O tamanho do tipo de dados não deve ser mencionado no momento da declaração do parâmetro, pois o tamanho é dinâmico para este tipo.

Com base em seus parâmetros de propósito são classificados como

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

Parâmetro IN:

  • Este parâmetro é usado para fornecer entrada para os subprogramas.
  • É uma variável somente leitura dentro dos subprogramas. Seus valores não podem ser alterados dentro do subprograma.
  • Na instrução de chamada, esses parâmetros podem ser uma variável ou um valor literal ou uma expressão, por exemplo, pode ser a expressão aritmética como '5 * 8' ou 'a / b' onde 'a' e 'b' são variáveis .
  • Por padrão, os parâmetros são do tipo IN.

Parâmetro OUT:

  • Este parâmetro é usado para obter a saída dos subprogramas.
  • É uma variável de leitura e gravação dentro dos subprogramas. Seus valores podem ser alterados dentro dos subprogramas.
  • Na instrução de chamada, esses parâmetros devem ser sempre uma variável para conter o valor dos subprogramas atuais.

Parâmetro IN OUT:

  • Este parâmetro é usado tanto para fornecer dados quanto para obter resultados dos subprogramas.
  • É uma variável de leitura e gravação dentro dos subprogramas. Seus valores podem ser alterados dentro dos subprogramas.
  • Na instrução de chamada, esses parâmetros devem ser sempre uma variável para conter o valor dos subprogramas.

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

RETORNA

RETURN é a palavra-chave que instrui o compilador a mudar o controle do subprograma para a instrução de chamada. No subprograma RETURN significa simplesmente que o controle precisa sair do subprograma. Assim que o controlador encontrar a palavra-chave RETURN no subprograma, o código após isso será ignorado.

Normalmente, o bloco pai ou principal chamará os subprogramas e, em seguida, o controle mudará desses blocos pai para os subprogramas chamados. RETURN no subprograma retornará o controle de volta ao bloco pai. No caso das funções, a instrução RETURN também retorna o valor. O tipo de dados deste valor é sempre mencionado no momento da declaração da função. O tipo de dados pode ser de qualquer tipo de dados PL / SQL válido.

O que é procedimento em PL / SQL?

Um procedimento em PL / SQL é uma unidade de subprograma que consiste em um grupo de instruções PL / SQL que podem ser chamadas por nome. Cada procedimento em PL / SQL tem seu próprio nome exclusivo pelo qual pode ser referido e chamado. Esta unidade de subprograma no banco de dados Oracle é armazenada como um objeto de banco de dados.

Observação: o subprograma nada mais é do que um procedimento e precisa ser criado manualmente de acordo com o requisito. Depois de criados, eles serão armazenados como objetos de banco de dados.

Abaixo estão as características da unidade de subprograma de procedimento em PL / SQL:

  • Os procedimentos são blocos autônomos de um programa que podem ser armazenados no banco de dados.
  • A chamada a esses procedimentos PLSQL pode ser feita referindo-se ao seu nome, para executar as instruções PL / SQL.
  • É usado principalmente para executar um processo em PL / SQL.
  • Ele pode ter blocos aninhados ou pode ser definido e aninhado dentro de outros blocos ou pacotes.
  • Ele contém parte da declaração (opcional), parte da execução, parte do tratamento de exceções (opcional).
  • Os valores podem ser passados ​​para o procedimento Oracle ou obtidos do procedimento por meio de parâmetros.
  • Esses parâmetros devem ser incluídos na instrução de chamada.
  • Um procedimento em SQL pode ter uma instrução RETURN para retornar o controle ao bloco de chamada, mas não pode retornar nenhum valor por meio da instrução RETURN.
  • Os procedimentos não podem ser chamados diretamente de instruções SELECT. Eles podem ser chamados de outro bloco ou por meio da palavra-chave EXEC.

Sintaxe:

CREATE OR REPLACE PROCEDURE
(
… )[ IS | AS ]BEGINEXCEPTIONEND;
  • CREATE PROCEDURE instrui o compilador a criar um novo procedimento no Oracle. A palavra-chave 'OR REPLACE' instrui a compilação a substituir o procedimento existente (se houver) pelo atual.
  • O nome do procedimento deve ser exclusivo.
  • A palavra-chave 'IS' será usada quando o procedimento armazenado no Oracle estiver aninhado em alguns outros blocos. Se o procedimento for independente, 'AS' será usado. Além deste padrão de codificação, ambos têm o mesmo significado.

Exemplo 1: Criando procedimento e chamando-o usando EXEC

Neste exemplo, vamos criar um procedimento Oracle que leva o nome como entrada e imprime a mensagem de boas-vindas como saída. Vamos usar o comando EXEC para chamar o procedimento.

CREATE OR REPLACE PROCEDURE welcome_msg (p_name IN VARCHAR2)ISBEGINdbms_output.put_line (‘Welcome '|| p_name);END;/EXEC welcome_msg (‘Guru99’);

Explicação do código:

  • Linha de código 1 : Criando o procedimento com o nome 'welcome_msg' e com um parâmetro 'p_name' do tipo 'IN'.
  • Linha de código 4 : imprimir a mensagem de boas-vindas concatenando o nome de entrada.
  • O procedimento foi compilado com sucesso.
  • Linha de código 7 : Chamar o procedimento usando o comando EXEC com o parâmetro 'Guru99'. O procedimento é executado e a mensagem é impressa como "Welcome Guru99".

O que é função?

Funções é um subprograma PL / SQL autônomo. Como o procedimento PL / SQL, as funções têm um nome exclusivo pelo qual podem ser referenciadas. Eles são armazenados como objetos de banco de dados PL / SQL. Abaixo estão algumas das características das funções.

  • As funções são um bloco autônomo usado principalmente para fins de cálculo.
  • A função usa a palavra-chave RETURN para retornar o valor, e o tipo de dados disso é definido no momento da criação.
  • Uma Função deve retornar um valor ou gerar a exceção, ou seja, o retorno é obrigatório em funções.
  • A função sem instruções DML pode ser chamada diretamente na consulta SELECT, enquanto a função com operação DML só pode ser chamada a partir de outros blocos PL / SQL.
  • Ele pode ter blocos aninhados ou pode ser definido e aninhado dentro de outros blocos ou pacotes.
  • Ele contém parte da declaração (opcional), parte da execução, parte do tratamento de exceções (opcional).
  • Os valores podem ser passados ​​para a função ou buscados no procedimento por meio dos parâmetros.
  • Esses parâmetros devem ser incluídos na instrução de chamada.
  • Uma função PLSQL também pode retornar o valor por meio de parâmetros OUT diferentes de RETURN.
  • Uma vez que sempre retornará o valor, na instrução de chamada, ele sempre acompanha o operador de atribuição para preencher as variáveis.

Sintaxe

CREATE OR REPLACE FUNCTION
(
)RETURN [ IS | AS ]BEGINEXCEPTIONEND; 
  • CREATE FUNCTION instrui o compilador a criar uma nova função. A palavra-chave 'OR REPLACE' instrui o compilador a substituir a função existente (se houver) pela atual.
  • O nome da função deve ser exclusivo.
  • O tipo de dados RETURN deve ser mencionado.
  • A palavra-chave 'IS' será usada quando o procedimento for aninhado em alguns outros blocos. Se o procedimento for independente, 'AS' será usado. Além deste padrão de codificação, ambos têm o mesmo significado.

Exemplo 1: Criando Função e chamando-a usando Bloco Anônimo

Neste programa, vamos criar uma função que recebe o nome como entrada e retorna a mensagem de boas-vindas como saída. Vamos usar o bloco anônimo e a instrução select para chamar a função.

CREATE OR REPLACE FUNCTION welcome_msgJune ( p_name IN VARCHAR2) RETURN VAR.CHAR2ISBEGINRETURN (‘Welcome ‘|| p_name);END;/DECLARElv_msg VARCHAR2(250);BEGINlv_msg := welcome_msg_func (‘Guru99’);dbms_output.put_line(lv_msg);END;SELECT welcome_msg_func(‘Guru99:) FROM DUAL;

Explicação do código:

  • Linha de código 1 : Criando a função Oracle com o nome 'welcome_msg_func' e com um parâmetro 'p_name' do tipo 'IN'.
  • Linha de código 2 : declarando o tipo de retorno como VARCHAR2
  • Linha de código 5 : Retornando o valor concatenado 'Welcome' e o valor do parâmetro.
  • Linha de código 8 : Bloco anônimo para chamar a função acima.
  • Linha de código 9 : Declarando a variável com o mesmo tipo de dados que o tipo de dados de retorno da função.
  • Linha de código 11 : Chamar a função e preencher o valor de retorno para a variável 'lv_msg'.
  • Linha de código 12 : Imprimindo o valor da variável. A saída que você obterá aqui é "Welcome Guru99"
  • Linha de código 14 : Chamando a mesma função por meio da instrução SELECT. O valor de retorno é direcionado diretamente para a saída padrão.

Semelhanças entre procedimento e função

  • Ambos podem ser chamados de outros blocos PL / SQL.
  • Se a exceção gerada no subprograma não for tratada na seção de tratamento de exceções do subprograma, ela se propagará 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 vs. Função: Principais diferenças

Procedimento Função
  • Usado principalmente para executar determinado processo
  • Usado principalmente para realizar alguns cálculos
  • Não é possível chamar na instrução SELECT
  • Uma função que não contém instruções DML pode ser chamada na instrução SELECT
  • Use o parâmetro OUT para retornar o valor
  • Use RETURN para retornar o valor
  • Não é obrigatório devolver o valor
  • É obrigatório devolver o valor
  • RETURN irá simplesmente sair do controle do subprograma.
  • RETURN sairá do controle do subprograma e também retornará o valor
  • O tipo de dados de retorno não será 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 várias funções integradas para trabalhar com strings e tipo de dados de data. Aqui, veremos as funções comumente usadas e seu uso.

Funções de conversão

Essas funções integradas são usadas para converter um tipo de dados em outro tipo de dados.

Nome da Função Uso Exemplo
TO_CHAR Converte o outro tipo de dados em tipo de dados de caractere TO_CHAR (123);
TO_DATE (string, formato) Converte a string fornecida para a data. A string deve corresponder ao formato. TO_DATE ('2015-JAN-15', 'AAAA-MON-DD'); Saída: 15/01/2015
TO_NUMBER (texto, formato) Converte o texto em tipo de número do formato fornecido. Informat '9' denota o número de dígitos Selecione TO_NUMBER ('1234', '9999') de dual; Saída: 1234 Selecione TO_NUMBER ('1,234,45', '9.999,99') de dual; Produto: 1234

Funções de String

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

Nome da Função Uso Exemplo
INSTR (texto, string, início, ocorrência) Dá a posição de um texto específico na string fornecida.
  • texto - string principal
  • string - texto que precisa ser pesquisado
  • início - posição inicial da pesquisa (opcional)
  • acordo - ocorrência da string pesquisada (opcional)
Selecione INSTR ('AVIÃO', 'E', 2,1) da Saída dupla : 2 Selecione INSTR ('AVIÃO', 'E', 2,2) da Saída dupla: 9 ( ocorrência de E)
SUBSTR (texto, início, comprimento) Fornece o valor da substring da string principal.
  • texto - string principal
  • início - posição inicial
  • comprimento - comprimento a ser subordinado
selecione substr ('avião', 1,7) de saída dupla : aeropla
SUPERIOR (texto) Retorna as letras maiúsculas do texto fornecido Selecione superior ('guru99') de dual; Saída : GURU99
INFERIOR (texto) Retorna as letras minúsculas do texto fornecido Selecione inferior ('avião') de duplo; Saída : avião
INITCAP (texto) Retorna o texto fornecido com a letra inicial em maiúsculas. Selecione ('guru99') da Saída dupla : Guru99 Selecione ('minha história') da Saída dupla : Minha história
LENGTH (texto) Retorna o comprimento da string dada Selecione LENGTH ('guru99') de dual; Produto : 6
LPAD (texto, comprimento, pad_char) Preenche a string no lado esquerdo para o comprimento fornecido (string total) com o caractere fornecido Selecione LPAD ('guru99', 10, '$') de dual; Resultado : $$$$ guru99
RPAD (texto, comprimento, pad_char) Preenche a string no lado direito para o comprimento fornecido (string total) com o caractere fornecido Selecione RPAD ('guru99', 10, '-') da Saída dupla : guru99 ----
LTRIM (texto) Corta o espaço em branco à esquerda do texto Selecione LTRIM ('Guru99') de dual; Resultado : Guru99
RTRIM (texto) Corta o espaço em branco à direita do texto Selecione RTRIM ('Guru99') de dual; Saída ; Guru99

Funções de data

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

Nome da Função Uso Exemplo
ADD_MONTHS (data, nº de meses) Adiciona os meses indicados à data ADD_MONTH ('2015-01-01', 5); Saída : 01/05/2015
SYSDATE Retorna a data e hora atuais do servidor Selecione SYSDATE em dual; Saída : 04/10/2015 14:11:43 PM
TRUNC Arredondar a variável de data para o menor valor possível selecione sysdate, TRUNC (sysdate) de dual; Saída : 04/10/2015 2:12:39 PM 04/10/2015
REDONDO Arredonda a data para o limite mais próximo, superior ou inferior Selecione sysdate, ROUND (sysdate) da saída dupla : 04/10/2015 14:14:34 PM 05/10/2015
MONTHS_BETWEEN Retorna o número de meses entre duas datas Selecione MONTHS_BETWEEN (sysdate + 60, sysdate) da Saída dupla : 2

Resumo

Neste capítulo, aprendemos o seguinte.

  • Como criar Procedimento e diferentes formas de chamá-lo
  • Como criar Função e diferentes maneiras de chamá-la
  • Semelhanças e diferenças entre procedimento e função
  • Parâmetros e terminologias comuns RETURN em subprogramas PL / SQL
  • Funções integradas comuns no Oracle PL / SQL