Процедура PL/Sql против функции?

Я попытался посмотреть на разницу между процедурой и функцией pl/sql и нашел ссылку http://it.toolbox.com/blogs/oracle-guide/learn-plsql-procedures-and-functions-13030. Сначала позвольте мне рассказать вам, что разработчик обычно делает с процедурой и функцией pl/sql

1) Требуется получить некоторое возвращаемое значение. Он может справиться с ней как с помощью функции, так и с помощью процедуры. С функцией, если он хочет вернуть одно значение, он может использовать оператор return. Если он хочет вернуть несколько значений, он может достичь этого с помощью параметра inout. Подобным образом он может получить возвращаемое значение с помощью параметра inout из процедуры (не с оператором return)

Но это не имеет никакого значения для разработчика, если он способен достичь своего намерения либо с помощью оператора return, либо с помощью параметра inout.

, так что и здесь оба могут заменить друг друга.

2) Он может использовать DML как в функции, так и в процедуре. Таким образом, здесь он также может использовать любой из них для изменения состояния базы данных.

Так что я не получаю никаких конкретных аргументов, которые можно использовать там, где оба могут заменить друг друга в некоторых.

Единственная разумная причина, по которой я нашел до некоторой степени то, что функции можно вызывать из SQL, процедура не может

Может кто-нибудь объяснить, какой из них использовать, когда и почему?

Ответы

Ответ 1

Вы уже нашли основное отличие. Вы создаете функцию, если хотите использовать ее в SQL. Вы создаете процедуру, когда хотите использовать ее только в PL/SQL.

Ответ 2

Что я делаю. Используйте функции, если нет побочных эффектов, иначе процедуры.

Кроме того, только функции могут быть "чистыми" (подходящими для индексов функций) и "конвейерными".

Ответ 3

Существуют два основных варианта:

1:Use Procedure to take some action. But use function to return some value. 
2:You can call function from sql query but Procedure can't. 
3:Best practice to use Procedure then function if possible. 

Спасибо.

Ответ 4

Процедура и функция имеют одинаковую структуру, за исключением того, что:

Заголовок функции должен включать предложение RETURN, которое задает тип данных возвращаемого значения. Заголовок процедуры не может иметь предложение RETURN.

Функция должна иметь хотя бы один оператор RETURN в своей исполняемой части. В процедуре оператор RETURN не является обязательным. Для получения дополнительной информации см. Инструкцию RETURN.

Для получения дополнительной информации обратитесь к: http://docs.oracle.com/cd/B28359_01/appdev.111/b28370/subprograms.htm#CHDDCFHD

Ответ 5

http://docs.oracle.com/cd/B28359_01/appdev.111/b28370/subprograms.htm#i4079

Обзор подпрограмм PL/SQL Подпрограмма PL/SQL - это именованный PL/SQL-блок, который можно вызвать с помощью набора параметров. Подпрограмма может быть либо процедурой, либо функцией. Обычно вы используете процедуру для выполнения действия и функцию для вычисления и возврата значения.