Статья основана на восьмом видео из 31 темы курса SQL 2.0 — PL/pgSQL в PostgreSQL от Аристова Евгения, который является логическим продолжением курса SQL c 0. Ссылки на видео на платформах RUTUBE и VK видео.
В данной статье подробно разбираются переменные типа record, его варианты использования и ограничения.
В прошлой статье мы разобрали операторы ветвления if и case, их формы, где и как могут быть применяться.
Презентация и исходники доступны по ссылке.
Тип record
Тип record — анонимный тип данных может быть как скалярным, так и составным. Используется тогда, когда мы заранее не знаем состав получаемых данных — количество и тип аргументов.
Это гибкая структура данных, которая позволяет хранить строку результата запроса или набор полей без строгой привязки к конкретной таблице. Она широко используется в процедурном коде (PL/pgSQL) для обработки данных, когда структура заранее неизвестна или может меняться.
DECLARE
row_record RECORD;
BEGIN
FOR row_record IN
SELECT id, name, salary FROM employees
LOOP
-- обращаемся к элементам RECORD по их именам
RAISE NOTICE 'Employee %: % (Salary: %)',
row_record.id,
row_record.name,
row_record.salary;
END LOOP;
END;
Ограничения и нюансы:
❖ Нельзя использовать вне процедурного блока (только в PL/pgSQL).
❖ Тип определяется в момент присвоения — нельзя заранее обратиться к полям, которые не были выбраны в запросе.
❖ Нельзя вернуть RECORD из функции без указания структуры:
— Ошибка: структура не определена
SELECT * FROM get_employees();
— Правильно: указание структуры при вызове
SELECT * FROM get_employees() AS (id INT, name TEXT);
В следующей теме разберём использование команды SELECT INTO.
Добавить комментарий