Время чтения: 2 min
Изменено:18.09.2026, 19:57:57
Функции
Это подпрограмма, которая выполняет SQL-операции, может принимать входные параметры и возвращать результат. Функции пишутся на PL/pgSQL.
Функции позволяют:
- Переиспользовать код
- Улучшать читаемость запросов
В функциях запрещены:
- Команды управления транзакциями
- Использовать служебные команды (create index, create user, и тд)
Общий вид:
create function ИНДФ(лок_пер Тип_дан, ...)
returns Тип_возврата as $$
Begin
Тело функции
end;
language plpgsql;
or replace - позволяет перезаписать функцию
create or replace ИНДФ ...
returns
Виды returns:
- Скалярное значение(одно значение)
returns тип_данных - Без возвращаемого значения
returns void - Возвращает множество значений
returns setof ИНДФsetof возвращает значение в 1 столбец, если нужно больше в теле функции используетсяreturn next - Возврат в табличной форме
returns table (ИДС тип_дан, ...)— возвращает несколько столбцов и строк. При использовании в теле нужно указыватьreturn query(при select). - Динамический результат
returns recordтип возвращаемого значения не имеет значения
Примеры:
Create or replace function gr632_test1(x int)
returns int as $$
Begin
return x*x;
End;$$
language plpgsql;
Create or replace function gr632_test2(mm text)
returns void as $$
Begin
raise notice 'message: %',mm;
End;$$
language plpgsql;
Select gr632_test2('hello')
create or replace function gr632_test3(a int)
returns setof int as $$
Begin
for i in 1..a loop
return next i;
end loop;
End;$$
language plpgsql;
create or replace function gr632_test4()
returns table(Номер_поств char(30), fam char(30)) as $$
Begin
return query
select s.Номер_поств, s.фамилия
from s;
End;$$
language plpgsql;
create or replace function gr632_test5(a int, b int)
returns record as $$
Begin
return (a,b);
End;$$
language plpgsql;
Вызов функций: В зависимости от returns функции можно использовать в разных местах.
- Если требуется получить данные то можно использовать select то есть функция как ИДС (индф-ф)
select ИНДФ-Ф() - Если требуется вывести в табличном формате(или просто запустить как таблицу) используеться в from как ИДТ
select * from gr632_test4() - Если функция возвращает 1 значение, то можно использовать как обычное значение к примеру (where, having, insert, update, set ...)
where ИДС = ИНДФ-Фinsert into ИДТ values (ИНДФ-Ф)