Qual é a diferença entre function e procedimento em PL / SQL?

Qual é a diferença entre function e procedimento em PL / SQL?

Um procedimento não possui um valor de retorno, enquanto uma function possui.

Exemplo:

CREATE OR REPLACE PROCEDURE my_proc (p_name IN VARCHAR2 := 'John') as begin ... end CREATE OR REPLACE FUNCTION my_func (p_name IN VARCHAR2 := 'John') return varchar2 as begin ... end 

Observe como a function tem uma cláusula de retorno entre a lista de parâmetros e a palavra-chave “as”. Isso significa que espera-se que a última instrução dentro do corpo da function leia algo como:

 return(my_varchar2_local_variable); 

Onde my_varchar2_local_variable é algum varchar2 que deve ser retornado por essa function.

Uma function pode ser alinhada em uma instrução SQL, por exemplo

 select foo ,fn_bar (foo) from foobar 

O que não pode ser feito com um procedimento armazenado. A arquitetura do otimizador de consulta limita o que pode ser feito com funções neste contexto, exigindo que elas sejam puras (ou seja, as mesmas inputs sempre produzem a mesma saída). Isso restringe o que pode ser feito na function, mas permite que ela seja usada na consulta se estiver definida como “pura”.

Caso contrário, uma function (não necessariamente determinística) pode retornar uma variável ou um conjunto de resultados. No caso de uma function retornar um conjunto de resultados, você poderá associá-la a alguma outra seleção em uma consulta. No entanto, não é possível usar uma function não determinística como essa em uma subconsulta correlacionada, pois o otimizador não pode prever que tipo de conjunto de resultados será retornado (isso é computacionalmente intratável, como o problema de parada).

Ambos os procedimentos e funções armazenados são chamados de “bloacks” que residem no database e podem ser executados como e quando necessário.

As principais diferenças são:

1. Um procedimento armazenado pode, opcionalmente, retornar valores usando parâmetros externos, mas também pode ser gravado de uma maneira sem retornar um valor. Mas uma function deve retornar um valor

2.Um procedimento armazenado não pode ser usado em uma instrução select onde as funções podem ser usadas em uma instrução select.

Praticamente falando, eu iria para um procedimento armazenado para um grupo específico de requisitos e uma function para um requisito comum que poderia ser compartilhado em vários cenários para g: comparação entre duas seqüências de caracteres ou aparando-os ou tomando a última parte, se tivermos um function para isso, poderíamos usá-lo globalmente para qualquer aplicação que temos

A seguir estão as principais diferenças entre procedimento e function,

  1. O procedimento é chamado de bloco PL / SQL que executa uma ou mais tarefas. onde a function é denominada bloco PL / SQL que executa uma ação específica.
  2. O procedimento pode ou não retornar o valor onde, como function, deve retornar um valor.
  3. podemos chamar funções na instrução select onde, como procedimento, não podemos.

De maneira simples e simples, isso faz sentido.

Funções :

Esses subprogramas retornam um único valor ; usado principalmente para calcular e retornar um valor.

Procedimento:

Esses subprogramas não retornam um valor diretamente; usado principalmente para executar uma ação.

Programa de Exemplo:

 CREATE OR REPLACE PROCEDURE greetings BEGIN dbms_output.put_line('Hello World!'); END ; / 

Executando um Procedimento Independente:

Um procedimento autônomo pode ser chamado de duas maneiras:

• Usando a palavra-chave EXECUTE • Chamando o nome do procedimento a partir de um bloco PL / SQL

O procedimento também pode ser chamado de outro bloco PL / SQL:

 BEGIN greetings; END; / 

Função:

 CREATE OR REPLACE FUNCTION totalEmployees RETURN number IS total number(3) := 0; BEGIN SELECT count(*) into total FROM employees; RETURN total; END; / 

O seguinte programa chama a function totalCustomers de outro bloco

 DECLARE c number(3); BEGIN c := totalEmployees(); dbms_output.put_line('Total no. of Employees: ' || c); END; / 

Nas poucas palavras – a function retorna alguma coisa. Você pode usar a function na consulta SQL. O procedimento faz parte do código para fazer alguma coisa com os dados, mas você não pode chamar o procedimento da consulta, você tem que executá-lo no bloco PL / SQL.

  1. As funções devem retornar um valor, o procedimento pode retornar um ou mais valores usando o parâmetro OUT ou pode não retornar o valor.

  2. Funções podem ser invocadas a partir do sql onde os procedimentos não podem.

  3. As funções são destinadas para cálculos, onde como Procedimentos é para lógica de negócios.

  4. O procedimento é pré-compilado, as funções não são.

  5. O procedimento suporta a resolução de nome diferido , onde as funções não são atribuídas.

  1. Podemos chamar um procedimento armazenado dentro do procedimento armazenado, function dentro da function, StoredProcedure dentro da function, mas não podemos chamar a function dentro do procedimento armazenado.
  2. podemos chamar a function dentro da instrução select.
  3. Podemos retornar o valor da function sem passar o parâmetro de saída como um parâmetro para o procedimento armazenado.

Essa é a diferença que eu encontrei. Por favor, deixe-me saber se houver.