В чем разница между function и procedure в PL/SQL?



в чем разница между function и procedure в PL/SQL ?

1152   8  

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: сравнение между двумя строками или обрезка их или взятие последней части, если у нас есть функция для этого ,мы могли бы глобально использовать ее для любого приложения, которое у нас есть

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

  1. процедура называется PL / SQL блок, который выполняет одну или несколько задач. где функция называется PL / SQL блок, который выполняет определенное действие.
  2. процедура может или не может возвращать значение, где функция должна возвращать одно значение.
  3. мы можем вызывать функции в инструкции 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.

  1. функции должны возвращать значение, процедура может возвращать одно или несколько значений с помощью параметра OUT или может вообще не возвращать значение.

  2. функции могут быть вызваны из sql, где как процедуры не могут.

  3. функции предназначены для вычислений, где as процедуры для бизнес-логики.

  4. процедуры предварительно скомпилированы, функции-нет.

  5. процедура поддерживает отложенные разрешение имен, где в качестве функции выигрыш.

  1. мы можем вызвать хранимую процедуру внутри хранимой процедуры, функцию внутри функции, StoredProcedure внутри функции, но мы не можем вызвать функцию внутри хранимой процедуры.
  2. мы можем вызвать функцию внутри оператора SELECT.
  3. мы можем возвращать значение из функции без передачи выходного параметра в качестве параметра хранимой процедуре.

вот в чем разница, которую я нашел. Пожалуйста, дайте мне знать, если таковые имеются .

Comments

    Ничего не найдено.