В чем разница между функцией и процедурой в PL/SQL?
В чем разница между функцией и процедурой в PL/SQL?
Ответ 1
Процедура не имеет возвращаемого значения, тогда как функция имеет.
Пример:
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, который должен быть возвращен этой функцией.
Ответ 2
Функция может быть встроена в инструкцию SQL, например.
select foo
,fn_bar (foo)
from foobar
Невозможно выполнить хранимую процедуру. Архитектура оптимизатора запросов ограничивает то, что можно сделать с помощью функций в этом контексте, требуя, чтобы они были чистыми (т.е. Одни и те же входы всегда дают один и тот же вывод). Это ограничивает то, что можно сделать в функции, но позволяет использовать его в строке в запросе, если он определен как "чистый".
В противном случае функция (необязательно детерминированная) может возвращать переменную или результирующий набор. В случае функции, возвращающей результирующий набор, вы можете присоединить его к другому выбору в запросе. Однако вы не можете использовать такую недетерминированную функцию в коррелированном подзапросе, поскольку оптимизатор не может предсказать, какой набор результатов будет возвращен (это сложно вычислить, как проблема с остановкой).
Ответ 3
Обе хранимые процедуры и функции называются bloacks, которые находятся в базе данных и могут выполняться как и когда требуется.
Основные отличия:
1. Хранимая процедура может необязательно возвращать значения с использованием параметров, но также может быть записана способом, не возвращая значения. Но функция должна возвращать значение
2. Сохраненная процедура не может использоваться в инструкции select, где, поскольку функции могут использоваться в операторе select.
Практически я хотел бы найти хранимую процедуру для определенной группы требований и функцию для общего требования, которое можно было бы использовать в разных сценариях для g: сравнение двух строк или обрезка их или взятие последней части, если у нас есть функция для этого, мы могли бы глобально использовать его для любого приложения, которое у нас есть
Ответ 4
Ниже перечислены основные различия между процедурой и функцией,
- Процедура называется PL/SQL-блоком, который выполняет одну или несколько задач. где функция называется PL/SQL-блоком, который выполняет определенное действие.
- Процедура может или не может возвращать значение, когда функция должна возвращать одно значение.
- мы можем вызывать функции в предложении select, где в качестве процедуры мы не можем.
Ответ 5
В мертвом простом смысле это делает этот смысл.
Функции:
Эти подпрограммы возвращают одиночное значение; в основном используется для вычисления и возврата значения.
Процедура:
Эти подпрограммы не возвращают значение напрямую; в основном используется для выполнения действия.
Пример программы:
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;
/
Ответ 6
В нескольких словах - функция возвращает что-то. Вы можете использовать функцию в SQL-запросе. Процедура является частью кода, чтобы что-то делать с данными, но вы не можете вызывать процедуру из запроса, вам нужно запустить ее в блоке PL/SQL.
Ответ 7
- мы можем вызвать хранимую процедуру внутри хранимой процедуры, функции внутри функции, функции StoredProcedure внутри функции, но мы не можем вызвать функцию в хранимой процедуре.
- мы можем вызывать функцию внутри оператора select.
- Мы можем вернуть значение из функции, не передавая выходной параметр в качестве параметра хранимой процедуры.
Вот что я нашел. Пожалуйста, дайте мне знать, если они есть.