Чем отличается процедура от функции oracle

Обновлено: 08.07.2024

В чем разница между функцией и процедурой в PL / SQL?

Процедура не имеет возвращаемого значения, тогда как функция имеет.

Обратите внимание, как функция имеет предложение возврата между списком параметров и ключевым словом as. Это означает, что ожидается, что последний оператор внутри тела функции будет выглядеть примерно так:

Где my_varchar2_local_variable - это некая varchar2, которая должна быть возвращена этой функцией.

Функция может быть встроена в оператор SQL, например

Этого нельзя сделать с помощью хранимой процедуры. Архитектура оптимизатора запросов ограничивает то, что можно делать с функциями в этом контексте, требуя, чтобы они были чистыми (т. Е. Одни и те же входные данные всегда давали одинаковый результат). Это ограничивает то, что может быть сделано в функции, но позволяет использовать ее в запросе, если он определен как «чистый».

В противном случае функция (не обязательно детерминированная) может возвращать переменную или набор результатов. В случае, если функция возвращает набор результатов, вы можете присоединить его к другому выбору в запросе. Однако вы не можете использовать такую ​​недетерминированную функцию в коррелированном подзапросе, поскольку оптимизатор не может предсказать, какой тип набора результатов будет возвращен (это трудноразрешимо с вычислительной точки зрения, как и проблема остановки).

Совершенно простым способом он придает это значение.

Функции:

Эти подпрограммы возвращают одно значение ; в основном используется для вычисления и возврата значения.

Процедура .

Эти подпрограммы не возвращают значение напрямую; в основном используется для выполнения действия.

Пример программы:

Выполнение автономной процедуры:

Автономную процедуру можно вызвать двумя способами:

• Использование ключевого слова EXECUTE • Вызов имени процедуры из блока PL / SQL

Процедуру также можно вызвать из другого блока PL / SQL:

Функция:

Следующая программа вызывает функцию totalCustomers из другого блока

И хранимые процедуры, и функции представляют собой именованные блоки, которые находятся в базе данных и могут выполняться по мере необходимости.

Хранимая процедура может при желании возвращать значения с использованием параметров out, но также может быть написана таким образом, чтобы не возвращать значение. Но функция должна возвращать значение.

Хранимую процедуру нельзя использовать в инструкции SELECT, тогда как функцию можно использовать в инструкции SELECT.

С практической точки зрения, я бы выбрал хранимую процедуру для определенной группы требований и функцию для общего требования, которая могла бы использоваться в нескольких сценариях. Например: сравнение двух строк, их обрезка или взятие последней части, если у нас есть функция для этого, мы могли бы глобально использовать ее для любого приложения, которое у нас есть.

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

  1. Процедура называется блоком PL / SQL, который выполняет одну или несколько задач. где функция называется блоком PL / SQL, который выполняет определенное действие.
  2. Процедура может возвращать или не возвращать значение, тогда как функция должна возвращать одно значение.
  3. мы можем вызывать функции в операторе select, где в качестве процедуры мы не можем.

В двух словах - функция что-то возвращает. Вы можете использовать функцию в SQL-запросе. Процедура - это часть кода, чтобы что-то делать с данными, но вы не можете вызывать процедуру из запроса, вы должны запускать ее в блоке PL / SQL.

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

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

Я смотрю на хранимые процедуры и функции MySQL. В чем реальная разница?

Они кажутся похожими, но функция имеет больше ограничений.

Я, вероятно, ошибаюсь,но, похоже, хранимая процедура может делать все и больше, чем хранимая функция. Почему / когда я буду использовать процедуру против функции?

вы не можете смешивать хранимые процедуры с обычным SQL, в то время как с сохраненной функцией вы можете.

например SELECT get_foo(myColumn) FROM mytable недопустимо, если get_foo() - это процедура, но вы можете сделать это, если get_foo() функция. Цена заключается в том, что функции имеют больше ограничений, чем процедура.

наиболее общее различие между процедурами и функциями состоит в том, что они вызываются по-разному и для разных целей:

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

синтаксис для рутинного создания несколько отличается для процедур и функций:

    параметры процедуры можно определить как вход-только, выход-только,или оба. Это означает, что процедура может передавать значения обратно с помощью выходных параметров. Эти значения можно найти в инструкции по оператор Call. Функции имеют только входные параметры. В результате, хотя и процедуры, и функции могут иметь параметры, объявление параметров процедуры отличается от объявления для функций.

функции возвращают значение, поэтому в определении функции должно быть предложение RETURNS для указания типа данных возвращаемого значения. Кроме того, в теле функции должен быть хотя бы один оператор RETURN для возврата значения вызывающему объекту. RETURNS и RETURN не отображаются в определение процедуры.

чтобы вызвать хранимую процедуру, используйте CALL statement . Чтобы вызвать хранимую функцию, обратитесь к ней в выражении. Функция возвращает значение во время вычисления выражения.

процедура вызывается с помощью оператора CALL и может передавать значения только с помощью выходных переменных. Функция может вызываться изнутри оператора так же, как и любая другая функция (то есть путем вызова имени функции), и может возвращать скалярное значение.

указание параметра как IN, OUT или INOUT допустимо только для процедуры. Для функции параметры всегда рассматриваются как In parameters.

Если перед именем параметра не задано ключевое слово, по умолчанию оно является параметром IN. параметры для сохраненных функций не предшествуют IN, OUT или INOUT. все параметры функции рассматриваются как параметры.

В определите хранимую процедуру или функцию, используйте CREATE PROCEDURE или CREATE FUNCTION соответственно:

расширение MySQL для хранимой процедуры (не функции) заключается в том, что процедура может генерировать результирующий набор или даже несколько результирующих наборов, которые вызывающий обрабатывает так же, как результат инструкции SELECT. Однако содержимое таких результирующих наборов нельзя использовать непосредственно в выражении.

сохраненные подпрограммы (имея в виду как хранить процедуры и хранимые функции) связаны с конкретной базой данных, так же, как таблицы или представления. при удалении базы данных также удаляются все хранимые процедуры в базе данных.

хранимые процедуры и функции не имеют общего пространства имен. в базе данных можно иметь процедуру и функцию с одинаковым именем.

в хранимых процедурах можно использовать динамический SQL, но не в функциях или триггерах.

подготовленные операторы SQL (PREPARE, EXECUTE, DEALLOCATE PREPARE) могут использоваться в хранимых процедурах, но не в хранимых функциях или триггерах. Таким образом, хранимые функции и триггеры не могут использовать динамический SQL (где вы строите операторы в виде строк, а затем выполняете их). (динамический SQL в MySQL хранятся подпрограммы)

некоторые более интересные различия между функцией и сохраненной Процедура:

(этот пункт скопировано с блога.) Хранимая процедура-это скомпилированный план выполнения, где в качестве функции нет. Функция проанализирована и скомпилирована во время выполнения. Хранимые процедуры, хранящиеся в виде псевдокода в базе данных, т. е. скомпилированной форме.

(я не уверен в этом.)
Хранимая процедура имеет безопасность и уменьшает сеть трафик, а также мы можем позвонить хранимая процедура в любом. из заявки за один раз. ссылка

функции нормально использованы для вычислений где как процедур обычно используются для выполнения бизнес-логики.

функции не могут влиять на состояние базы данных (Операторы, которые делают явную или неявную фиксацию или откат, запрещены в функции) Поскольку Хранимые процедуры могут влиять на состояние базы данных с помощью commit etc.
refrence: Ж. 1. Ограничения на хранимые процедуры и триггеры

функции не могут использовать FLUSH операторы, тогда как хранимые процедуры могут делать.

сохраненные функции не могут быть рекурсивными, тогда как хранимые процедуры могут быть. Примечание: рекурсивные хранимые процедуры отключены по умолчанию, но могут быть включены на сервере, установив системную переменную max_sp_recursion_depth сервера ненулевое значение. См.5.2.3, "Системные Переменные", для получения дополнительной информации.

в хранимой функции или триггере не разрешается изменять таблицу, которая уже используется (для чтения или записи) оператором, который вызвал функцию или триггер. Хороший Пример:Как обновить ту же таблицу при удалении в MYSQL?

Примечание: хотя некоторые ограничения обычно применяются к сохраненным функциям и триггерам, но не к хранимые процедуры эти ограничения применяются к хранимым процедурам, если они вызываются из хранимой функции или триггера. Например, хотя в хранимой процедуре можно использовать FLUSH, такую хранимую процедуру нельзя вызвать из хранимой функции или триггера.

одно существенное различие заключается в том, что вы можете включить функции в ваших SQL-запросах, но хранимых процедур можно вызвать только с помощью CALL о себе:

хранимая функция может использоваться в запросе. Затем вы можете применить его к каждой строке или в предложении WHERE.

процедура выполняется с помощью запроса вызова.

хранимая процедура может вызываться рекурсивно, но хранимая функция не может


Programming Language for SQL (PL/SQL) – решение Oracle, предоставляющее средства, которые позволяют выполнять сложную обработку информации (plsql).

Программные единицы PL/SQL

Структура блока PL/SQL

Блок PL/SQL может содержать до четырех разделов, однако только один из них является обязательным.

  • Заголовок. Используется только в именованных блоках, определяет способ вызова именованного блока или программы. Не обязателен.
  • Раздел объявлений. Содержит описания переменных, курсоров и вложенных блоков, на которые имеются ссылки в исполняемом разделе и разделе исключений. Не обязателен.
  • Исполняемый раздел. Команды, выполняемые ядром PL/SQL во время работы приложения. Обязателен.
  • Раздел исключений. Обрабатывает исключения (предупреждения и ошибки). Не обязателен.

Хранимая процедура

Хранимая процедура — это определенный набор инструкций, написанных на языке PL/SQL. Вызов процедуры приводит к выполнению содержащихся в ней инструкций. Процедура хранится в базе данных, поэтому и называется хранимой. Процедура состоит из двух основных частей:спецификации и тела.
Спецификация процедуры (procedure specification) включает в себя имя процедуры и описание ее входных и выходных данных. Эти входные и выходные данные называются формальными параметрами (formal parameters) или формальными аргументами (formal arguments). Если при вызове процедуры указываются параметры командной строки или другие входные данные, эти значения называются фактическими (actual) параметрами или фактическими аргументами.
Пример спецификации

increase_salary_find_tax ( increase_percent IN NUMBER : = 7 , sal IN OUT NUMBER , tax OUT NUMBER )

Здесь мы видим процедуру с тремя формальными параметрами. Слово IN после имени параметра означает, что при вызове процедура может считать из этого параметра входное значение. Слово OUT означает, что процедура может использовать данный параметр для возврата значения в ту программу, из которой она была вызвана. Комбинация IN OUT после имени параметра говорит о том, что параметр может использоваться как для передачи значения процедуре, так и для возврата значения.
Тело процедуры (procedure body) — это блок PL/SQL-кода.

Хранимые функции

Функция PL/SQL похожа на процедуру PL/SQL: она также имеет спецификацию и тело. Главное различие между процедурой и функцией в том, что функция предназначена для возврата значения, которое может использоваться в более крупном SQL-Операторе.

Триггеры

Триггер — это процедура PL/SQL, которая выполняется автоматически, когда происходит некоторое заданное событие, называемое триггерным событием (triggering event).
Например, можно писать триггеры, срабатывающие при выполнении над таблицей операций INSERT, UPDATE или DELETE; при выдаче команд DDL; при входе пользователя в систему или его выходе из системы; при запуске или останове базы данных; при возникновении ошибок.
Между триггерами и процедурами PL/SQL есть три различия:

  • Триггеры нельзя вызывать из кода программы. Oracle вызывает их автоматически в ответ на определенное событие.
  • Триггеры не имеют списка параметров.
  • Спецификация триггера немного отличается от спецификации процедуры.

Структура блока PL/SQL

Базовый блок PL/SQL состоит из четырех секций:

  • секции заголовка (header section);
  • необязательной секции объявлений (declaration section);
  • выполняемой секции (execution section);
  • необязательной секции исключений (exception section).

Анонимный блок (anonumous block) — это блок PL/SQL без секции заголовка, иначе говоря, секции имени, поэтому он и называется анонимным. Анонимные блоки могут выполняться из SQL*Plus и использоваться в функциях, процедурах и триггерах PL/SQL. Вспомните, что сами процедуры, функции и триггеры также состоят из базовых блоков. Это означает, что базовый блок можно помещать в другой базовый блок.

Секция объявлений

Секция объявлений не является обязательной. В случае использования она начинается после секции заголовка и оканчивается перед ключевым, словом BEGIN. Эта секция содержит объявления переменных, констант, курсоров, исключений, функций и процедур PL/SQL, которые будут использоваться в выполняемой секции и секции исключений. Все объявления переменных и констант должны размещаться до объявлений функций или процедур. О переменных и константах PL/SQL будет подробно рассказано в следующем разделе. Объявление сообщает PL/SQL о том, что нужно создать переменную, константу, курсор, функцию или процедуру согласно приведенной спецификации. Когда выполнение базового блока завершается, все элементы, объявленные в секции объявлений, перестают существовать. Элементы, объявленные в секции объявлений базового блока, могут использоваться только в пределах этого блока. Одним словом, все, что находится в секции объявлений, при надлежит блоку и может использоваться только внутри него, а следовательно, существует только на протяжении его времени жизни. Часть кода, в которой может использоваться переменная, называется областью видимости (scope).

Выполняемая секция

Выполняемая секция начинается с ключевого слова BEGIN и заканчивается либо ключевым словом EXCEPTION, если присутствует секция исключений, либо ключевым словом END, за которым следуют необязательное имя функции или процедуры и точка с запятой. Выполняемая секция содержит один и более PL/SQL-операторов, выполняемых при передаче управления данному блоку. Структура выполняемой секции показана ниже.

В выполняемом коде PL/SQL чаще всего встречается оператор присваивания (:=). Он указывает, что нужно вычислить выражение справа и поместить результат в переменную слева.

Секция исключений

действия , предпринимаемые при возникновении исключения действия , предпринимаемые при возникновении исключения

Секция исключений начинается с ключевого слова EXCEPTION и продолжается до конца блока. Каждому исключению соответствует оператор WHEN имя_исключения, указывающий, что должно быть сделано при возникновении данного исключения. Все операторы, находящиеся между оператором, вызвавшим ошибку, и секцией исключений, игнорируются. Выполнение оператора, указанного в секции исключений, называется обработкой исключения (exception handling). Процесс, включающий в себя обнаружение ошибки, определение, какое исключение описывает ее наилучшим образом, и передачу PL/SQL информации, позволяющей найти соответствующий код в секции исключений, называется возбуждением исключения (raising exception).

Переменные

Переменные — это именованные контейнеры. Они могут содержать информацию (данные) различных видов. В зависимости от того, какую информацию в них можно помещать, они имеют различные типы данных, а чтобы отличать их друг от друга, им присваиваются имена. PL/SQL хранит числа в переменных типа NUMBER, а текст — в переменных типа CHAR или VARCHAR2. Синтаксис объявления переменной в PL/SQL может иметь любую из следующих форм:

имя _ переменной тип _ данных [ [ NOTNULL ] : = выражение _ по _ умолчанию ] ; имя _ переменной тип _ данных [ [ NOT NULL ] DEFAULT выражение _ по _ умолчанию ] ;

Имя_переменной — это любой правильный идентификатор PL/SQL. Правильный идентификатор PL/SQL должен:

Тип_данных — это любой допустимый тип данных SQL или PL/SQL. Модификатор NOT NULL требует, чтобы переменная имелазначение. Если он указан, переменной должно быть присвоено значение по умолчанию.

Объявление констант PL/SQL

Синтаксис объявления константы имеет следующий вид:

имя _ переменной тип _ данных CONSTANT : = выражение ;

В отличие от переменных константам обязательно присваивается значение, которое нельзя изменять на протяжении времени жизни константы. Константы очень полезны для поддержания безопасности и дисциплины при разработке больших и сложных приложений. Например, если вы хотите гарантировать, что процедура PL/SQL не будет модифицировать передаваемые ей данные, можете объявить их константами. Если процедура все же попытается их модифицировать, PL/SQL возбудит исключение.

Оператор IF

Оператор IF имеет следующий синтаксис:

Циклы

PL/SQL предоставляет три различные конструкции для итеративной обработки. Каждая из них позволяет циклически выполнять набор операторов PL/SQL. Выход из цикла осуществляется в зависимости от некоторого условия.

Конструкция LOOP имеет следующий синтаксис:

Цикл WHILE

Еще одной разновидностью цикла является цикл WHILE. Он хорошо подходит в ситуациях, когда количество итераций заранее неизвестно, и определяется некоторым внешним фактором. Цикл WHILE имеет следующий синтаксис:

Цикл FOR

В цикле FOR для подсчета итераций используется переменная-счетчик, называемая также индексом цикла (loop index). По завершении каждой итерации счетчик увеличивается, начиная с нижнего предела, или уменьшается, начиная с верхнего предела. Как только его значение выйдет за указанный диапазон, цикл завершается. Синтаксис цикла FOR выглядит следующим бразом:

FOR счетчик IN [ REVERSE ] нижняя _ граница . . верхняя _ граница LOOP

Курсоры

Объявление курсора и атрибуты курсора

Курсор объявляется в процедуре PL/SQL следующим образом:

оператор _select [ FOR UPDATE [ OF таблица _ или _ столбец _1 [ , таблица _ или _ столбец _2 . . . ] ] ]

Параметры курсора похожи на параметры процедуры, за тем исключением, что они всегда являются входными (IN). Использование параметров OUT или IN OUT невозможно, поскольку курсор не может их модифицировать. Параметры используются в конструкции WHERE курсорного оператора SELECT. Спецификация возврата показывает, записи какого типа будут выбираться оператором SELECT. Таблица_или_столбец — это имя столбца, который предстоит обновлять, или имя таблицы, в которой предстоит удалять или обновлять строки. Оно должно входить в число имен таблиц и столбцов, указанных в операторе SELECT курсора, и предназначено для документирования, показывая, какие элементы могут быть потенциально модифицированы кодом, использующим данный курсор. Команда FOR UPDATE блокирует строки, выбранные оператором SELECT при открытии курсора. Строки остаются заблокированными до тех пор, пока вы не закроете курсор рассмотренными выше способами. Атрибуты курсора:

Записи PL/SQL

Запись PL/SQL— это набор данных базовых типов. К ней можно обращаться, как к единому целому. Для доступа к отдельным полям записи применяется нотация имя_записи_имя_поля, которую вы уже использовали для столбцов таблицы. Записи могут иметь один из трех типов, перечисленных ниже; вы можете объявлять переменные, имеющие тип записи.

  • Основанные на таблице (table-based) Эти записи имеют поля, совпадающие по имени и типу со столбцами таблицы. Если курсор выбирает всю строку — например, оператором SELECT * FROM некоторая_таблица — то возвращаемые им записи можно непосредственно копировать в переменную, имеющую тип записи, основанной на таблице некоторая_таблица.
  • Основанные на курсоре (cursor-based) Поля этих записей совпадают по имени, типу и порядку с заключительным списком столбцов в курсорном операторе SELECT.
  • Определенные программистом (programmer-defined) Это записи, тип которых определяете вы сами.

Использование команд OPEN, FETCH и CLOSE

Команды открытия курсора, выборки из курсора и закрытия курсора имеют следующий синтаксис:

FETCH имя _ курсора INTO переменная _ или _ список _ переменных ;

После открытия курсор содержит набор записей, если в результате успешного выполнения оператора SELECT из базы данных были выбраны заданные строки. Каждая команда FETCH удаляет запись из открытого курсора и перемещает ее содержимое либо в переменную PL/SQL, тип записи которой совпадает с типом записи курсора, либо в группу переменных PL/SQL, где каждая переменная в списке совпадает по типу с соответствующим полем в записи курсора. Перед тем как пытаться выбрать из курсора очередную запись, следует проверить с помощью атрибутов FOUND и NOTFOUND, есть ли в нем еще записи. Выборки из пустого курсора будут все время давать последнюю запись, не приводя к ошибке. Не забывайте проверять атрибуты FOUND и NOTFOUND при использовании FETCH. Фактическая обработка записей из курсора обычно выполняется внутри цикла. При написании такого цикла неплохо начать с проверки, была ли найдена запись в курсоре. Если да, можно продолжать необходимую обработку; в противном случае следует выйти из цикла. То же самое можно сделать более коротким путем, использовав курсорный цикл FOR. При этом PL/SQL будет осуществлять открытие, выборку и закрытие без вашего участия.

Курсорный цикл FOR

Синтаксис курсорного цикла FOR имеет следующий вид:

Конструкция WHERE CURRENT OF

Когда курсор открывается для обновления или удаления выбранных записей, можно использовать конструкцию WHERE CURRENT OF имя_курсора для доступа к таблице и строке, которые соответствуют последней записи, выбранной в конструкции WHERE оператора UPDATE или DELETE.

Обработка ошибок

В языке PL/SQL ошибки всех видов интерпретируются как исключения — ситуации, которые не должны возникать при нормальном выполнении программы.
К числу исключений относятся:

  • ошибки, генерируемые системой (например, нехватка памяти или повторяющееся значение индекса);
  • ошибки, вызванные действиями пользователя;
  • предупреждения, выдаваемые приложением пользователю.

exception_plsql

PL/SQL перехватывает ошибки и реагирует на них при помощи так называемых обработчиков исключений. Механизм обработчиков исключений позволяет четко отделить код обработки ошибок от основной логики программы, а также дает возможность реализовать обработку ошибок, управляемую событиями. Независимо от того, как и по какой причине возникло конкретное исключение, оно всегда обрабатывается одним и тем же обработчиком в разделе исключений.
При возникновении ошибки — как системной, так и ошибки в приложении — в PL/SQL инициируется исключение. В результате выполнение блока прерывается, и управление передается для обработки в раздел исключений текущего блока, если он имеется. После обработки исключения возврат в тот блок, где исключение было инициировано, невозможен, поэтому управление передается во внешний блок.
Схема передачи управления при возникновении исключения:

Существует два типа исключений:

  • Системное исключение определяется в Oracle и обычно инициируется исполняемым ядром PL/SQL, обнаружившим ошибку. Одним системным исключениям присваиваются имена (например, NO_DATA_FOUND), другие ограничиваются номерами и описаниями.
  • Исключение, определяемое программистом, актуально только для конкретного приложения. Имя исключения можно связать с конкретной ошибкой Oracle с помощью директивы компилятора EXCEPTION_INIT или же назначить ошибке номер и описание процедурой RAISE_APPLICATION_ERROR.

Исключения

Системные исключения

Исключения, определяемые программистом

Одной из удобных возможностей PL/SQL является то, что он позволяет вам определять свои собственные исключения. При возбуждении и обработке они должны именоваться и объявляться аналогично любым другим элементам PL/SQL. Исключение объявляется в секции объявлений. Аналогично любой другой объявленной там переменной, исключение действительно только для данного блока. Вы можете использовать свои собственные исключения для обработки ошибок, которые система не обнаруживает или не считает за ошибки.

Схема сложного запроса PL/SQL с использованием временных таблиц

Ниже рассмотрена схема получения результирующей таблицы в Oracle Database, используя временные таблицы.

Основное отличие: функции и процедуры являются подпрограммами Oracle. Основное различие между ними заключается в том, что функции всегда возвращают значение, а процедуры могут или не могут.


Oracle, как мы знаем, является широко используемым языком кодирования. Программа известна как набор кодов и инструкций в технической терминологии или терминологии кодирования. Эти программы состоят из небольших модулей или мини-программ, которые предназначены для выполнения определенных задач. Этим подпрограммам назначаются различные задачи, и они вызываются через вызывающую программу или другую подпрограмму в случае выполнения определенной указанной задачи.


Функции и процедуры - не что иное, как подпрограммы в Oracle. Они используются для выполнения набора конкретных инструкций от пользователя. Например, функция AVG () используется для вычисления среднего значения всех значений, которые предоставляются программе в качестве входных данных. Аналогичным образом, процедуры также используются для таких конкретных задач в программе. Однако поразительное различие между ними заключается в том, что функция всегда возвращает значение, а процедура не всегда возвращает его. Процедура успешно выполняет задачу, но может возвращать или не возвращать значение.

Сравнение между функцией и процедурой:

функция

Процедура

Всегда возвращает значение.

Может или не может вернуть значение.

Функция выполняет конкретную задачу.

Процедура может выполнять несколько задач.

Вызов из операторов SQL

Такой вызов возможен для функций.

Такой вызов не осуществим для процедур.

Функции обычно используются для выполнения вычислений.

Процедуры используются для выполнения бизнес-логики.

Функция не выполняется независимо. Он должен быть частью исполняемого оператора.

Сама процедура представляет собой исполняемый оператор, поэтому она может выполняться независимо.

Читайте также: