Ответ
В SQL-базах данных (PostgreSQL, MySQL, MS SQL) есть несколько типов объектов, хранящих предопределенный код:
1. Хранимые процедуры (Stored Procedures)
- Наиболее распространенный объект. Содержит последовательность SQL-операторов.
- Может принимать входные параметры, выполнять сложную бизнес-логику на стороне БД.
- Не обязана возвращать значение (может модифицировать данные).
-
Пример (PostgreSQL):
CREATE OR REPLACE PROCEDURE archive_old_orders(cutoff_date DATE) LANGUAGE plpgsql AS $$ BEGIN INSERT INTO orders_archive SELECT * FROM orders WHERE order_date < cutoff_date; DELETE FROM orders WHERE order_date < cutoff_date; COMMIT; END; $$; -- Вызов CALL archive_old_orders('2023-01-01');
2. Пользовательские функции (User-Defined Functions)
- Обязаны возвращать значение (скалярное или табличное).
- Могут использоваться внутри SQL-запросов как часть выражений.
-
Пример скалярной функции:
CREATE FUNCTION get_total_sales(employee_id INT) RETURNS DECIMAL AS $$ BEGIN RETURN (SELECT SUM(amount) FROM sales WHERE emp_id = employee_id); END; $$ LANGUAGE plpgsql; -- Использование в запросе SELECT name, get_total_sales(id) FROM employees;
3. Триггеры (Triggers)
- Специальный вид хранимой процедуры, которая автоматически выполняется при наступлении определенного события (
INSERT,UPDATE,DELETE) с таблицей. - Часто используются для аудита, поддержания целостности данных.
4. Представления (Views) и Материализованные представления (Materialized Views)
- View: Виртуальная таблица, определяемая SQL-запросом. Код запроса хранится в БД.
- Materialized View: Физически сохраняет результат запроса, который можно обновлять. Содержит и код запроса, и данные.
Ответ 18+ 🔞
Да ты посмотри, какие штуки в базах данных припрятаны, а? Это ж целый арсенал, чтобы данные не просто лежали, а прямо плясали под твою дудку. Сейчас разберём, что к чему, без этой академической сухости, на пальцах.
1. Хранимые процедуры (Stored Procedures) Ну, это как главный заводила в этой каморке. Ты ему задание даёшь — он его выполняет от и до. Можешь сунуть в него кучу параметров, а он там внутри накрутит такую логику, что мама не горюй. Возвращать что-то — не его дело, его дело делать. Архив там создать, записи перетереть — он за всё берётся.
CREATE OR REPLACE PROCEDURE archive_old_orders(cutoff_date DATE)
LANGUAGE plpgsql
AS $$
BEGIN
INSERT INTO orders_archive
SELECT * FROM orders WHERE order_date < cutoff_date;
DELETE FROM orders WHERE order_date < cutoff_date;
COMMIT;
END;
$$;
-- А запускается просто, как старый добрый движок:
CALL archive_old_orders('2023-01-01');
2. Пользовательские функции (User-Defined Functions) А вот это уже не работяга, а больше такой... интеллигент. Он обязан тебе что-то вернуть. Скаляр, таблицу — но вернуть. Его можно прямо в запрос встроить, как винтик, и он там тихо своё дело сделает. Удобно, чёрт возьми.
CREATE FUNCTION get_total_sales(employee_id INT)
RETURNS DECIMAL AS $$
BEGIN
RETURN (SELECT SUM(amount) FROM sales WHERE emp_id = employee_id);
END;
$$ LANGUAGE plpgsql;
-- И пошла плясать логика прямо в селекте:
SELECT name, get_total_sales(id) FROM employees;
3. Триггеры (Triggers)
О, это моя любимая тема, ёпта! Это как скрытый снайпер на чердаке. Сидит себе, молчит. Но стоит только в таблице что-то произойти — бац INSERT, бац UPDATE — он тут как тут, отрабатывает свою программу. Идеально для аудита, чтобы знать, какая сволочь и когда последний раз меняла цены. Автоматизация, блядь, в чистом виде.
4. Представления (Views) и Материализованные представления
С View всё просто — это такой хитрый фокус. Таблицы как бы нет, а запрос есть. Запросил — он на лету всё посчитал и отдал. Красиво, но если запрос тяжёлый, то каждый раз будет ебать тебе мозг производительностью.
А вот Materialized View — это уже серьёзный парень. Он не просто запрос хранит, он результат этого запроса материализует, в рот меня чих-пых! То есть данные физически лежат. Быстро? Овердохуища быстро! Но чтобы они свежими были, их надо периодически REFRESH-ить, обновлять, то есть. Зато скорость выборки — просто песня.
Вот и весь базовый набор, чтобы не просто данные хранить, а чтобы они работали, сука, как швейцарские часы. Выбирай инструмент по задаче и вперёд.