11/06/2018

Diferenças entre FUNCTION e PROCEDURE

Uma function é um bloco PL/SQL muito semelhante a uma procedure.

O que podemos entender de início entre esses dois tipos de blocos é que os blocos functions retornam valores e as procedures podem ou não retornar um valor.

As functions tem duas características que diferem das procedures, as quais não podemos deixar de tratar:
  • As functions sempre retornam valores;
  • Functions são usadas como parte de uma expressão.
Para que possamos criar uma função no PL/SQL precisamos entender o seu funcionamento e para isso precisamos entender a sua sintaxe básica. Vejamos:

CREATE [OR REPLACE] FUNCTION function_name
[(parameter_name [IN | OUT | IN OUT] type [, ...])]
RETURN return_datatype
{IS | AS}
BEGIN
< function_body >
END [function_name];
  • CREATE [OR REPLACE] FUNCTION: Caso uma function já exista com o mesmo nome, ela será reescrita devido ao termo ‘replace’. Caso contrário, ela será criada de acordo com o termo ‘create’.
  • Function_name: Será o nome atribuído para essa função.
  • Parameters: a lista opcional de parâmetros contém os nomes, os modos e os tipos que esses parâmetros terão. O IN representa o valor que será passado de fora, já o OUT representa que este parâmetro será utilizado para retornar um valor de fora do procedimento.
  • Return_datatype: é o tipo de retorno que será utilizado, sendo este SQL ou PL/SQL. Podemos neste caso utilizar referências como o %TYPE ou %ROWTYPE se necessário, ou mesmo utilizar qualquer tipo de dados escalar ou composto.
  • IS/AS: por convecção, temos o ‘is’ para a criação de funções armazenadas e o ‘as’ quando criamos pacotes (packages).
  • function_body: contém o bloco PL/SQL que inicia com a claúsula BEGIN e finaliza com END [function_name], e executa neste momento todas as instruções necessárias.
Podemos executar a função de várias formas:

Declarando como variável:

func_nome := funcao_de_teste;

Ou então como parte de uma instrução select:

SELECT funcao_de_teste FROM dual;

Ou também como uma instrução PL/SQL:

dbms_output.put_line(funcao_de_teste);

Uma procedure normalmente possui um cabeçalho e um corpo.
O cabeçalho consiste do nome e de parâmetros ou variáveis que serão passadas para a procedure. Já o corpo consiste da declaração de uma seção, execução de uma seção e uma seção de exceções muito similar a um bloco geral da PL/SQL.

Uma procedure pode ou não ter um valor de retorno. Normalmente as procedures são criadas dentro de pacotes ou em blocos PL/SQL.

Podemos passar os parâmetros para uma procedure de três maneiras:
  • Parâmetros IN – passamos o valor na própria procedure;
  • Parâmetros OUT – recebemos o valor a partir da chamada de blocos externos;
  • Parâmetros IN OUT – passamos um valor inicial para a procedure e recebemos de volta uma atualização.
Vejamos a sintaxe geral (estrutura básica) da criação de uma procedure:

CREATE [OR REPLACE] PROCEDURE proc_name [list of parameters]
IS
Declaration section
BEGIN
Execution section
EXCEPTION
Exception section
END;

O ‘Is’ marca o início do corpo de uma procedure e é bem similar ao DECLARE de um bloco anônimo PL/SQL. O código criado entre o IS e o BEGIN forma a seção de declaração da procedure.
A sintaxe entre os colchetes [] indica que é opcional. Mas de igual forma a uma função, a utilização do CREATE é para criar uma procedure e o REPLACE irá sobrepor uma procedure existente com novas informações de código.
Para utilizar uma Procedure:
  • Usando a palavra-chave EXECUTE;
  • Chamando o nome da procedure de um bloco PL/SQL.
No primeiro caso, executamos da seguinte forma:

EXECUTE procedure_de_teste;

E no nosso outro caso, que é a partir de um bloco, temos:

BEGIN
procedure_de_teste;
END;

Para apagar uma procedure ou uma function, basta utilizar o comando DROP. Exemplos:
  • drop function funcao_de_teste;
  • drop procedure procedure_de_teste.
Abraço a todos.
Fontes para consulta:
http://www.devmedia.com.br/pl-sql-functions-e-procedures/29882
https://codigosimples.net/2016/02/24/principais-diferencas-entre-stored-procedures-e-functions/
http://www.profissionaloracle.com.br/gpo/servicos/easyblog/entry/2009/09/25/oracle-plsql-funcoes-functions-e-procedures

Nenhum comentário:

Post de destaque

O que é SQL ?

SQL (structured Query Language) é um conjunto de comandos de manipulação de banco de dados utilizado para criar e manter a estrutura desse...