Функция и процедура в чем разница sql
Чем отличаются функции от хранимых процедур в T-SQL (Microsoft SQL Server)
Приветствую всех посетителей сайта Info-Comp.ru! Сегодня мы с Вами поговорим о том, чем же отличаются функции от хранимых процедур в Microsoft SQL Server, и для наглядности сформируем итоговую таблицу отличий.
Функции и хранимые процедуры T-SQL
В Microsoft SQL Server существуют такие объекты базы данных, как функции и хранимые процедуры, которые используются для хранения неких уже реализованных алгоритмов на языке T-SQL.
Примечание! В данном материале речь идет о пользовательских функциях и хранимых процедурах, не о системных, которые уже реализованы в SQL Server, а о тех, которые создаем мы с Вами, т.е. программисты T-SQL.
Функции и хранимые процедуры используются в языке T-SQL для реализации бизнес логики, упрощения сложных SQL запросов, а также для написания различных инструкций администрирования баз данных и сервера, которые периодически необходимо выполнять.
Иными словами, функции и хранимые процедуры – это своего рода мини программы внутри базы данных, они помогают нам реализовывать нужные нам алгоритмы и хранить их в базе данных. Кроме этого, функции и хранимые процедуры позволяют декомпозировать одну глобальную задачу на несколько мелких, тем самым упрощая решение этой задачи и дальнейшее сопровождение этого решения, так как весь алгоритм становится модульным и более гибким.
У начинающих может возникнуть вопрос – а чем отличаются функции от процедур? Или это одно и то же?
Конечно же, это не одно и то же, и между этими понятиями, в контексте языка T-SQL, есть нескольких ключевых отличный.
Отличия функций от хранимых процедур в T-SQL
Давайте перейдем к рассмотрению основных отличный функций от хранимых процедур, а чтобы было более наглядно, сделаем это в виде таблицы.
Функция
Хранимая процедура
Операторы DML (INSERT, UPDATE, DELETE) для модификации данных использовать нельзя.
На сегодня это все, надеюсь, материал был Вам полезен, пока!
В чем разница между функцией и процедурой в PL/SQL?
8 ответов
процедура не имеет возвращаемого значения, тогда как функция.
обратите внимание, как функция имеет предложение return между списком параметров и ключевым словом «as». Это означает, что ожидается, что последний оператор внутри тела функции будет читать что-то вроде:
где my_varchar2_local_variable-это некоторый varchar2, который должен быть возвращен этой функцией.
функция может быть встроена в инструкцию SQL, например
что нельзя сделать с помощью хранимой процедуры. Архитектура оптимизатора запросов ограничивает то, что можно сделать с функциями в этом контексте, требуя, чтобы они были чистыми (т. е. одни и те же входы всегда производят один и тот же выход). Это ограничивает то, что можно сделать в функции, но позволяет использовать ее в строке запроса, если она определена как «чистая».
в противном случае, функция (не обязательно детерминированный) может возвращать переменную или результирующий набор. В случае функции, возвращающей результирующий набор, его можно объединить с каким-либо другим выбором в запросе. Однако вы не можете использовать недетерминированную функцию, подобную этой, в коррелированном подзапросе, поскольку оптимизатор не может предсказать, какой результирующий набор будет возвращен (это вычислительно сложно, как и проблема остановки).
2.Хранимая процедура не может использоваться в инструкции select, где функции могут использоваться в select заявление.
ниже приведены основные различия между процедурой и функцией,
мертвым простым способом это делает этот смысл.
функции :
эти подпрограммы возвращают одно значение; в основном используется для вычисления и возвращает значение.
процедура :
эти подпрограммы не возвращает значение сразу; главным образом использованный для того чтобы выполнить действие.
Пример:
выполнение отдельного Процедура:
автономную процедуру можно вызвать двумя способами:
• С помощью EXECUTE ключевое слово * Вызов имени процедуры из блока PL/SQL
процедура также может быть вызвана из другого блока PL / SQL:
функция:
следующая программа вызывает функцию totalCustomers из другого блока
функции должны возвращать значение, процедура может возвращать одно или несколько значений с помощью параметра OUT или вообще не возвращать значение.
функции могут быть вызваны из sql, где as процедуры не могут.
функции предназначены для вычисления, где, как процедуры для businiess логики.
процедура предварительно скомпилирована, функции-нет.
процедура поддерживает deffered разрешение имени, где в качестве функции выигрыш.
MySQL хранимая процедура vs функция, которую я бы использовал, когда?
Я смотрю на хранимые процедуры и функции MySQL. В чем реальная разница?
Они кажутся похожими, но функция имеет больше ограничений.
Я, вероятно, ошибаюсь,но, похоже, хранимая процедура может делать все и больше, чем хранимая функция. Почему / когда я буду использовать процедуру против функции?
5 ответов
вы не можете смешивать хранимые процедуры с обычным SQL, в то время как с сохраненной функцией вы можете.
наиболее общее различие между процедурами и функциями состоит в том, что они вызываются по-разному и для разных целей:
синтаксис для рутинного создания несколько отличается для процедур и функций:
функции возвращают значение, поэтому в определении функции должно быть предложение RETURNS для указания типа данных возвращаемого значения. Кроме того, в теле функции должен быть хотя бы один оператор RETURN для возврата значения вызывающему объекту. RETURNS и RETURN не отображаются в определение процедуры.
процедура вызывается с помощью оператора 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.
процедура выполняется с помощью запроса вызова.
хранимая процедура может вызываться рекурсивно, но хранимая функция не может
Разница между хранимой процедурой и функцией
Содержание:
Ключевые области покрыты
1. Что такое хранимая процедура
— определение, примеры
2. Что такое функция
— определение, примеры
3. Разница между хранимой процедурой и функцией
— Сравнение основных различий
Основные условия
Функция, хранимая процедура
Что такое хранимая процедура
Рисунок 1: Хранимая процедура
Синтаксис хранимой процедуры следующий.
СОЗДАТЬ ПРОЦЕДУРУ имя_процесса
Следующий запрос используется для выполнения процедуры,
Следующая инструкция SQL создает имя хранимой процедуры «SelectStudents». Он выбирает записи всех учеников в таблице учеников.
СОЗДАНИЕ ПРОЦЕДУРЫ SelectStudents
ВЫБРАТЬ * ОТ СТУДЕНТОВ
Хранимая процедура может быть выполнена с помощью следующей команды:
Хранимая процедура также может принимать параметры. Ниже оператора SQL создайте хранимую процедуру, которая выбирает «Студенты с заданным именем» из таблицы «Студент».
СОЗДАНИЕ ПРОЦЕДУРЫ SelectStudents @ Name varchar (50)
ВЫБЕРИТЕ * ОТ студентов, ГДЕ Имя = @ Имя
Следующая инструкция используется для выполнения процедуры.
EXEC SelectStudents Name = «Ann»;
Он выберет всех учеников с именем «Энн» в таблице учеников.
Что такое функция
Рисунок 2: Основная функция в C
Функция имеет следующий синтаксис.
return_type имя_функции (список параметров) <
// операторы внутри функции
Могут быть функции, которые принимают параметры и не принимают параметры. Обратитесь ниже функции.
prinf («Hello World n»);
Выше простая функция C. Он не получает никаких параметров. Он просто выводит сообщение «Hello World» на консоль. Эта функция не возвращает никакого значения. Следовательно, тип возвращаемого значения void.
Функция также может принимать параметры. Смотрите приведенный ниже пример.
int calArea (int width, int length) <
int area = ширина * длина;
Разница между хранимой процедурой и функцией
Определение
использование
Кроме того, хранимая процедура используется в RDBMS, в то время как функция используется в любом языке программирования, таком как C, C ++, Java и т. Д.
Заключение
Ссылка:
1. «Хранимые процедуры SQL для SQL Server». Онлайн-учебники W3Schools,
В чем разница между функцией и процедурой в PL / SQL?
В чем разница между функцией и процедурой в PL / SQL?
7 ответов
Процедура не имеет возвращаемого значения, тогда как функция имеет.
Обратите внимание, как функция имеет предложение возврата между списком параметров и ключевым словом as. Это означает, что ожидается, что последний оператор внутри тела функции будет выглядеть примерно так:
Функция может быть встроена в оператор SQL, например
Этого нельзя сделать с помощью хранимой процедуры. Архитектура оптимизатора запросов ограничивает то, что можно делать с функциями в этом контексте, требуя, чтобы они были чистыми (т. Е. Одни и те же входные данные всегда давали одинаковый результат). Это ограничивает то, что может быть сделано в функции, но позволяет использовать ее в запросе, если он определен как «чистый».
В противном случае функция (не обязательно детерминированная) может возвращать переменную или набор результатов. В случае, если функция возвращает набор результатов, вы можете присоединить его к другому выбору в запросе. Однако вы не можете использовать такую недетерминированную функцию в коррелированном подзапросе, поскольку оптимизатор не может предсказать, какой тип набора результатов будет возвращен (это трудноразрешимо с вычислительной точки зрения, как и проблема остановки).
Совершенно простым способом он придает это значение.
Функции:
Эти подпрограммы возвращают одно значение ; в основном используется для вычисления и возврата значения.
Эти подпрограммы не возвращают значение напрямую; в основном используется для выполнения действия.
Пример программы:
Выполнение автономной процедуры:
Автономную процедуру можно вызвать двумя способами:
• Использование ключевого слова EXECUTE • Вызов имени процедуры из блока PL / SQL
Процедуру также можно вызвать из другого блока PL / SQL:
Функция:
Следующая программа вызывает функцию totalCustomers из другого блока
И хранимые процедуры, и функции представляют собой именованные блоки, которые находятся в базе данных и могут выполняться по мере необходимости.
Хранимая процедура может при желании возвращать значения с использованием параметров out, но также может быть написана таким образом, чтобы не возвращать значение. Но функция должна возвращать значение.
Хранимую процедуру нельзя использовать в инструкции SELECT, тогда как функцию можно использовать в инструкции SELECT.
С практической точки зрения, я бы выбрал хранимую процедуру для определенной группы требований и функцию для общего требования, которая могла бы использоваться в нескольких сценариях. Например: сравнение двух строк, их обрезка или взятие последней части, если у нас есть функция для этого, мы могли бы глобально использовать ее для любого приложения, которое у нас есть.
Ниже приведены основные различия между процедурой и функцией.
Вот в чем разница, которую я нашел. Пожалуйста, дайте мне знать, если таковые имеются.