Vasulio-crtVasulio-crt
FoxelyssFoxelyss
Время чтения: 2 min
Изменено:18.09.2026, 19:57:57

Функции

Это подпрограмма, которая выполняет SQL-операции, может принимать входные параметры и возвращать результат. Функции пишутся на PL/pgSQL.

Функции позволяют:

  1. Переиспользовать код
  2. Улучшать читаемость запросов

В функциях запрещены:

  1. Команды управления транзакциями
  2. Использовать служебные команды (create index, create user, и тд)

Общий вид:

create function ИНДФ(лок_пер Тип_дан, ...)
returns Тип_возврата as $$
Begin
	Тело функции
end;
language plpgsql;

or replace - позволяет перезаписать функцию create or replace ИНДФ ...

returns

Виды returns:

  1. Скалярное значение(одно значение) returns тип_данных
  2. Без возвращаемого значения returns void
  3. Возвращает множество значений returns setof ИНДФ setof возвращает значение в 1 столбец, если нужно больше в теле функции используется return next
  4. Возврат в табличной форме returns table (ИДС тип_дан, ...) — возвращает несколько столбцов и строк. При использовании в теле нужно указывать return query (при select).
  5. Динамический результат 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 функции можно использовать в разных местах.

  1. Если требуется получить данные то можно использовать select то есть функция как ИДС (индф-ф) select ИНДФ-Ф()
  2. Если требуется вывести в табличном формате(или просто запустить как таблицу) используеться в from как ИДТ select * from gr632_test4()
  3. Если функция возвращает 1 значение, то можно использовать как обычное значение к примеру (where, having, insert, update, set ...) where ИДС = ИНДФ-Ф insert into ИДТ values (ИНДФ-Ф)