A diferença é que uma função deve retornar um valor (de qualquer tipo) por definição padrão dele, enquanto no caso de um procedimento você precisa usar parâmetros como
OUT ou IN OUT parâmetros para obter os resultados. Você pode usar uma função em um SQL normal onde como você não pode usar um procedimento em SQL declarações. Algumas diferenças entre funções e procedimentos
-
Uma função sempre retorna um valor usando a instrução return enquanto um procedimento pode retornar um ou mais valores por meio de parâmetros ou pode não retornar nada.Embora,OUTparâmetros ainda podem ser usados em funções, eles não são aconselháveis nem há casos em que se possa encontrar a necessidade de fazê-lo. UsandoOUTO parâmetro restringe o uso de uma função em uma instrução SQL.
-
As funções podem ser usadas em instruções SQL típicas comoSELECT,INSERT,UPDATE,DELETE,MERGE, enquanto os procedimentos não podem.
-
As funções são normalmente usadas para cálculos, enquanto os procedimentos são normalmente usados para executar a lógica de negócios.
-
A Oracle oferece a possibilidade de criar "Índices Baseados em Função" para melhorar o desempenho da instrução SQL subsequente. Isso se aplica ao executar a função em uma coluna indexada na cláusula where de uma consulta.
Mais informações sobre funções vs. Procedimentos aqui e aqui.