Отличия функций от хранимых процедур в языке T-SQL (Microsoft SQL Server) | Info-Comp.ru
Приветствую всех посетителей сайта Info-Comp.ru! Сегодня мы с Вами поговорим о том, чем же отличаются функции от хранимых процедур в Microsoft SQL Server, и для наглядности сформируем итоговую таблицу отличий.
Заметка! Обзор Azure Data Studio. Что это за инструмент и для чего он нужен.
В Microsoft SQL Server существуют такие объекты базы данных, как функции и хранимые процедуры, которые используются для хранения неких уже реализованных алгоритмов на языке T-SQL.
Примечание! В данном материале речь идет о пользовательских функциях и хранимых процедурах, не о системных, которые уже реализованы в SQL Server, а о тех, которые создаем мы с Вами, т.е. программисты T-SQL.
Функции и хранимые процедуры используются в языке T-SQL для реализации бизнес логики, упрощения сложных SQL запросов, а также для написания различных инструкций администрирования баз данных и сервера, которые периодически необходимо выполнять.
Иными словами, функции и хранимые процедуры – это своего рода мини программы внутри базы данных, они помогают нам реализовывать нужные нам алгоритмы и хранить их в базе данных. Кроме этого, функции и хранимые процедуры позволяют декомпозировать одну глобальную задачу на несколько мелких, тем самым упрощая решение этой задачи и дальнейшее сопровождение этого решения, так как весь алгоритм становится модульным и более гибким.
У начинающих может возникнуть вопрос – а чем отличаются функции от процедур? Или это одно и то же?
Конечно же, это не одно и то же, и между этими понятиями, в контексте языка T-SQL, есть нескольких ключевых отличный.
Давайте перейдем к рассмотрению основных отличный функций от хранимых процедур, а чтобы было более наглядно, сделаем это в виде таблицы.
Функция | Хранимая процедура |
Функция должна возвращать значение. | Хранимая процедура может как возвращать, так и не возвращать значение. |
Функции не могут возвращать несколько результирующих наборов. | Хранимая процедура может сформировать и вернуть несколько результирующих наборов данных. |
Функции можно использовать в операторе SELECT. | Процедуры нельзя использовать в операторе SELECT и во всех его секциях (WHERE, JOIN, HAVING и т.д.), так как процедуры вызываются с помощью команды EXECUTE или EXEC. |
В функциях можно использовать только оператор SELECT на выборку данных. Операторы DML (INSERT, UPDATE, DELETE) для модификации данных использовать нельзя. | В хранимых процедурах можно использовать оператор SELECT, а также операторы DML (INSERT, UPDATE, DELETE) для модификации данных. |
Из функции нельзя вызвать хранимые процедуры. | В хранимых процедурах можно вызывать и функции, и другие хранимые процедуры. |
Конструкцию для обработки ошибок TRY CATCH нельзя использовать в функциях. Так же как нельзя использовать инструкцию RAISERROR. | В хранимых процедурах можно использовать и конструкцию TRY CATCH, и инструкцию RAISERROR. |
В функциях запрещено использование транзакций. | В хранимых процедурах транзакции разрешены. |
В функциях можно использовать только табличные переменные, временные таблицы использовать не получится. | В хранимых процедурах можно использовать как табличные переменные, так и временные таблицы. |
В функциях нельзя использовать динамический SQL. | В процедурах можно использовать динамический SQL. |
В функциях можно использовать только входные параметры. | В хранимых процедурах можно использовать как входные, так и выходные параметры. |
Заметка! Курсы по T-SQL для начинающих.
На сегодня это все, надеюсь, материал был Вам полезен, пока!
DB-PSQL-03. Разработка БД PostgreSQL — курсы в Санкт-Петербурге
Длительность дисциплины: 48 ак. ч.
Аннотация
Целью реализации программы повышения квалификации является формирование и/или совершенствование профессиональных компетенций в области проектирования и создания объектов БД PostgreSQL, обеспечения целостности данных и управления транзакциями.
Знания и умения, полученные в результате изучения
В результате освоения модуля обучающийся должен уметь:
- проектировать и создавать таблицы, представления, хранимые процедуры, функции и триггера в БД PostgreSQL;
- обеспечивать целостность данных с помощью ограничений;
- планировать и создавать эффективные индексы;
- работать с внешними данными;
- использовать основные типы данных, включая записи и массивы.
В результате освоения модуля обучающийся должен знать:
- основные концепции баз данных в контексте PostgreSQL;
- принципы манипулирования данными и обеспечения целостности данных в базах данных PostgreSQL;
- принципы планирования эффективных индексных структур;
- логическую и физическую структуру баз данных.
В результате освоения модуля обучающийся должен приобрести практический опыт:
- разработки объектов баз данных;
- решения задач по разработке целостной структуры хранения данных в БД.
Содержание дисциплины
Тема 1. Проектирование и создание таблиц БД
1.1 Создание таблиц
1.2 Дополнительные возможности определения столбцов
1.3 Изменение таблиц
1.4 Удаление таблиц
Практические занятия
1. Создание таблиц в БД
2. Модификация таблиц
Тема 2. Обеспечение целостности данных с помощью ограничений
2.1 Поддержание целостности данных
2.2 Создание ограничений
2.3 Управление ограничениями
Практические занятия
Обеспечение целостности данных при помощи ограничений целостности
Тема 3. Модификация данных в таблицах БД
3.1 Добавление данных
3.2 Изменение данных
3. 3 Удаление данных
3.4 Возврат данных из изменённых строк
Практические занятия
Модификация данных в таблицах БД
Тема 4. Управление транзакциями
4.1 Транзакции и многоверсионность
4.2 Управление изоляцией транзакций
4.3 Блокировки
Практические занятия
Управление изоляцией транзакций
Тема 5. Дополнительные возможности создания таблиц
5.1 Наследование таблиц
5.2 Секционирование таблиц
5.3 Внешние таблицы
Практические занятия
1. Создание таблиц через наследование
2. Создание секционированных таблиц
Тема 6. Создание и управление индексами
6.1 Индексы
6.2 Создание и удаление индексов
6.3 Обслуживание индексов
Практические занятия
Создание индексов
Тема 7. Создание представлений (View)
7.1 Представления
7.2 Изменяемые представления
7.3 Материализованные представления
Практические занятия
1. Создание представлений.
2. Создание материализованных представлений
Тема 8. Создание программных модулей в БД
8.1 Программирование на стороне сервера
8.2 Скалярные функции
8.3 Хранимые процедуры
8.4 Составные типы
8.5 Табличные функции
8.6 Триггера
Практические занятия
1. Создание пользовательских функций
2. Создание пользовательских процедур
3. Создание составных типов
Тема 9. Промежуточная аттестация
Практические занятия Зачет
В чем разница между «Хранимой процедурой» и другими типами функций в PostgreSQL?
спросил
Изменено 3 года, 4 месяца назад
Просмотрено 12 тысяч раз
Я понимаю разницу между:
- Скалярные функции
- Set-Returning-Functions (SRF) s
- Внутренние функции
- Оконные функции
- Агрегированные функции всех видов
- Пользовательские функции (которые в PostgreSQL могут быть реализованы на любом языке)
- И т. д.
В SQL Server «Хранимые процедуры» разрешены через EXEC
. Что это дает по сравнению с любой другой функцией, выполняемой с помощью SELECT
, которая возвращает NULL
?
Когда PostgreSQL получит хранимые процедуры, что они мне принесут и каково формальное различие между функцией и хранимой процедурой в спецификации?
Я читал этот вопрос, но, кажется, он предшествует объявлению о реализации 2
Поскольку функции Postgres ( CREATE FUNCTION
) только выполняются в контексте (одной) транзакции, некоторые важные команды не могут выполняться внутри тела функции. Нравится СОЗДАТЬ БАЗУ ДАННЫХ
или СОЗДАТЬ ИНДЕКС ОДНОВРЕМЕННО
или ВАКУУМ
. Руководство:
VACUUM
не может выполняться внутри блока транзакции.
Функции часто называют «хранимыми процедурами», что всегда было вводящим в заблуждение термином — вероятно, заимствованным из других СУБД. С появлением процедур SQL ( CREATE PROCEDURE
) в Postgres 11 этого неправильного названия следует полностью избегать.
Процедуры SQL могут начинать и завершать транзакции. Но команды, упомянутые выше, вообще не разрешены внутри какого-либо блока транзакций, поэтому они также не могут быть включены в процедуры SQL (пока).
Несколько наборов результатов запланированы на будущее, но еще не реализованы.
Связанный:
- Когда использовать хранимую процедуру/определяемую пользователем функцию?
- Функция Производительность
Функции PostgreSQL не могут запускать или завершать транзакции. Они застряли с любой транзакцией, которую они унаследовали от своего вызывающего запроса.
Когда PostgreSQL получит хранимые процедуры, они смогут открывать и закрывать транзакции.
См. также
- https://www.postgresql.org/message-id/178d3380-0fae-2982-00d6-c43100bc8748%402ndquadrant. com
Зарегистрируйтесь или войдите в систему
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя электронную почту и пароль
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания, политикой конфиденциальности и политикой использования файлов cookie
postgresql — Когда использовать хранимую процедуру/определяемую пользователем функцию?
спросилИзменено 8 месяцев назад
Просмотрено 13 тысяч раз
Я запутался в использовании SP (хранимые процедуры) и UDF (определяемые пользователем функции). Как правило, также возможно писать код в программах вне базы данных.
Есть ли какой-нибудь общий совет, когда их использовать?
- postgresql
- хранимые процедуры
- функции
1
Postgres 11 или новее
Процедуры SQL (не функции ) могут COMMIT
и запускать новые транзакции:
Руководство для
Запись в блоге 2ndquadrant, представляющая эту функцию.
Однако команды, которые не разрешены в блоке транзакций, не могут (пока) быть включены. Важные примеры CREATE DATABASE
или CREATE INDEX CONCURRENTLY
или VACUUM
.
Процедуры And могут возвращать только одну результирующую строку, если они созданы с параметрами INOUT
.
Postgres 14 или более поздней версии также позволяет использовать параметры OUT
.
Postgres 10 или старше (исходный ответ)
Строго говоря, пока нет "хранимых процедур". Всего выполняет функции , делая почти то же самое, но не совсем то же самое. (Терминология часто путается!) Самое главное, функции всегда выполняются внутри одной транзакции, что имеет значение для управления блокировками, перехвата ошибок или команд, которые невозможно выполнить в контексте транзакции (см. выше). Связанный:
- В чем разница между «Хранимой процедурой» и другими типами функций в PostgreSQL?
Обработка данных в SQL может иметь значительные преимущества по сравнению с извлечением всех необработанных данных в ваше приложение и выполнением там вычислений:
- Каковы плюсы и минусы выполнения вычислений в sql по сравнению с вашим приложением
Тот же принцип может применяться к более крупным операциям, которые не могут быть выполнены в одном операторе, даже при использовании «сцепленных» команд в CTE (модифицирующем данные):
- Запросы типа SELECT являются единственным типом, который может быть вложенным?
- RETURN QUERY-Record в PostgreSQL
В зависимости от варианта использования функция может быть более производительной и часто более удобной, особенно когда несколько приложений обращаются к одной и той же базе данных.