8 ответов:
процедура не имеет возвращаемого значения, тогда как функция.
пример:
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обратите внимание, что функция имеет предложение return между списком параметров и ключевым словом "as". Это означает, что ожидается, что последний оператор внутри тела функции будет читать что-то вроде:
return(my_varchar2_local_variable);где my_varchar2_local_variable-это некоторый varchar2, который должен быть возвращен этой функцией.
функция может быть встроена в инструкцию SQL, например
select foo ,fn_bar (foo) from foobarчто нельзя сделать с помощью хранимой процедуры. Архитектура оптимизатора запросов ограничивает то, что можно сделать с функциями в этом контексте, требуя, чтобы они были чистыми (т. е. одни и те же входные данные всегда дают один и тот же выход). Это ограничивает то, что можно сделать в функции, но позволяет использовать ее в строке запроса, если она определена как "чистая".
в противном случае, функция (не обязательно детерминированный) может возвращать переменную или результирующий набор. В случае функции, возвращающей результирующий набор, Вы можете объединить его с каким-либо другим выбором в запросе. Однако вы не можете использовать такую недетерминированную функцию в коррелированном подзапросе, поскольку оптимизатор не может предсказать, какой результирующий набор будет возвращен (это вычислительно неразрешимо, как проблема остановки).
Как хранимые процедуры, так и функции называются блоками, которые находятся в базе данных и могут выполняться по мере необходимости .
основные отличия :
1.Хранимая процедура может дополнительно возвращать значения с помощью параметров out, но также может быть записана таким образом, чтобы не возвращать значение .Но функция должна возвращать значение
2.Хранимая процедура не может использоваться в инструкции select, где в качестве функций можно использовать select заявление.
практически говоря, я бы выбрал хранимую процедуру для определенной группы требований и функцию для общего требования, которые могут быть разделены между несколькими сценариями для g: сравнение между двумя строками или обрезка их или взятие последней части, если у нас есть функция для этого ,мы могли бы глобально использовать ее для любого приложения, которое у нас есть
ниже приведены основные различия между процедурой и функцией,
- процедура называется PL / SQL блок, который выполняет одну или несколько задач. где функция называется PL / SQL блок, который выполняет определенное действие.
- процедура может или не может возвращать значение, где функция должна возвращать одно значение.
- мы можем вызывать функции в инструкции Select, где в качестве процедуры мы не можем.
в мертвой простой способ это делает этот смысл.
функции :
эти подпрограммы возвращают a одно значение; в основном используется для вычисления и возвращает значение.
процедура :
эти подпрограммы не возвращает значение сразу; в основном используется для выполнения действий.
Пример:
CREATE OR REPLACE PROCEDURE greetings BEGIN dbms_output.put_line('Hello World!'); END ; /выполнение отдельного Процедура:
автономная процедура может быть вызвана двумя способами:
• С помощью
EXECUTEключевое слово * Вызов имени процедуры из блока PL / SQLпроцедура также может быть вызвана из другого блока PL / SQL:
BEGIN greetings; END; /функция:
CREATE OR REPLACE FUNCTION totalEmployees RETURN number IS total number(3) := 0; BEGIN SELECT count(*) into total FROM employees; RETURN total; END; /следующая программа вызывает функцию
totalCustomersиз другого блокаDECLARE c number(3); BEGIN c := totalEmployees(); dbms_output.put_line('Total no. of Employees: ' || c); END; /
в нескольких словах - функция возвращает что-то. Вы можете использовать функцию в SQL-запросе. Процедура является частью кода, чтобы сделать что-то с данными, но вы не можете вызвать процедуру из запроса, вы должны запустить его в блоке PL/SQL.
функции должны возвращать значение, процедура может возвращать одно или несколько значений с помощью параметра OUT или может вообще не возвращать значение.
функции могут быть вызваны из sql, где как процедуры не могут.
функции предназначены для вычислений, где as процедуры для бизнес-логики.
процедуры предварительно скомпилированы, функции-нет.
процедура поддерживает отложенные разрешение имен, где в качестве функции выигрыш.
- мы можем вызвать хранимую процедуру внутри хранимой процедуры, функцию внутри функции, StoredProcedure внутри функции, но мы не можем вызвать функцию внутри хранимой процедуры.
- мы можем вызвать функцию внутри оператора SELECT.
- мы можем возвращать значение из функции без передачи выходного параметра в качестве параметра хранимой процедуре.
вот в чем разница, которую я нашел. Пожалуйста, дайте мне знать, если таковые имеются .
Comments