Ответ 1
Вы уже нашли основное отличие. Вы создаете функцию, если хотите использовать ее в SQL. Вы создаете процедуру, когда хотите использовать ее только в 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, процедура не может
Может кто-нибудь объяснить, какой из них использовать, когда и почему?
Вы уже нашли основное отличие. Вы создаете функцию, если хотите использовать ее в SQL. Вы создаете процедуру, когда хотите использовать ее только в PL/SQL.
Что я делаю. Используйте функции, если нет побочных эффектов, иначе процедуры.
Кроме того, только функции могут быть "чистыми" (подходящими для индексов функций) и "конвейерными".
Существуют два основных варианта:
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.
Спасибо.
Процедура и функция имеют одинаковую структуру, за исключением того, что:
Заголовок функции должен включать предложение RETURN, которое задает тип данных возвращаемого значения. Заголовок процедуры не может иметь предложение RETURN.
Функция должна иметь хотя бы один оператор RETURN в своей исполняемой части. В процедуре оператор RETURN не является обязательным. Для получения дополнительной информации см. Инструкцию RETURN.
Для получения дополнительной информации обратитесь к: http://docs.oracle.com/cd/B28359_01/appdev.111/b28370/subprograms.htm#CHDDCFHD
http://docs.oracle.com/cd/B28359_01/appdev.111/b28370/subprograms.htm#i4079
Обзор подпрограмм PL/SQL Подпрограмма PL/SQL - это именованный PL/SQL-блок, который можно вызвать с помощью набора параметров. Подпрограмма может быть либо процедурой, либо функцией. Обычно вы используете процедуру для выполнения действия и функцию для вычисления и возврата значения.