В чем разница между функцией и процедурой в 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.
  • Мы можем вернуть значение из функции, не передавая выходной параметр в качестве параметра хранимой процедуры.

Вот что я нашел. Пожалуйста, дайте мне знать, если они есть.