Хочу сегодня привести примеры создания функций для СУБД Microsoft SQL Server и PostgreSQL. Функция возвращает таблицу с 3-мя полями.
Как это пишется в MS SQL Server:
CREATE FUNCTION dbo.myFunction (--variables list--) RETURNS result_table TABLE(field1 integer, field2 integer, field3 integer) AS BEGIN insert into result_table select val1, val2, val3 from another_table; return; END;
А вот так в PostgreSQL:
CREATE OR REPLACE FUNCTION public.get_count_in_batch(--variables list--) RETURNS TABLE(field1 integer, field2 integer, field3 integer) LANGUAGE 'plpgsql' COST 100 VOLATILE ROWS 1000 AS $BODY$ begin return query select val1, val2, val3 from another_table; end; $BODY$;
Конечно, здесь примеры сокращены до минимума, только лишь с целью показать механизм возврата результата.
И еще
В случае с MS SQL Server, если есть необходимость в промежуточных каких-то вычислениях, можно воспользоваться переменной временной таблицы и регистрировать там какие-то промежуточные результаты. Затем «перебросить» значения из нее в результирующую таблицу:
declare t table (temp_field1 int, temp_field2 int, temp_field3 int); ... insert into result_table select * from t; return;
В PostgreSQL все проще: можно использовать «сложносочиненные» запросы и просто вернуться в качестве выборки (упрощенный пример):
return query select product_code, (select sum(cost)*10 from kassa where product_id = pId), (select sum(amount) from store where product_id = pId) from products where product_id = pId;
Функция, возвращающая таблицу returns table — в PostgreSQL и MS SQL Server: 1 комментарий