Microsoft SQL Server, PostgreSQL

Функция, возвращающая таблицу returns table — в PostgreSQL и MS SQL Server

Хочу сегодня привести примеры создания функций для СУБД Microsoft SQL Server и PostgreSQL. Функция возвращает таблицу с 3-мя полями.

Как это пишется в MS SQL Server:

[pastacode lang=»sql» manual=»CREATE%20FUNCTION%20dbo.myFunction%20(%3Cvariables%20list%3E)%0ARETURNS%20%40result_table%20TABLE(field1%20integer%2C%20field2%20integer%2C%20field3%20integer)%20%0AAS%0ABEGIN%0A%20%20%20%20insert%20into%20%40result_table%20%0A%09select%20val1%2C%20val2%2C%20val3%20from%20another_table%3B%0A%09return%3B%0AEND» message=»Функция в Microsoft SQL Server» highlight=»5,6,7″ provider=»manual»/]

А вот так в PostgreSQL:

[pastacode lang=»sql» manual=»CREATE%20OR%20REPLACE%20FUNCTION%20public.get_count_in_batch(%3Cvariabls%20list%3E)%0A%20%20%20%20RETURNS%20TABLE(field1%20integer%2C%20field2%20integer%2C%20field3%20integer)%20%0A%20%20%20%20LANGUAGE%20’plpgsql’%0A%0A%20%20%20%20COST%20100%0A%20%20%20%20VOLATILE%20%0A%20%20%20%20ROWS%201000%0AAS%20%24BODY%24%0Abegin%0A%09return%20query%20select%20val1%2C%20val2%2C%20val3%20from%20another_table%3B%0Aend%3B%0A%24BODY%24%3B» message=»Функция в PostgreSQL» highlight=»10″ provider=»manual»/]

Конечно, здесь примеры сокращены до минимума, только лишь с целью показать механизм возврата результата.

И еще

В случае с MS SQL Server, если есть необходимость в промежуточных каких-то вычислениях, можно воспользоваться переменной временной таблицы и регистрировать там какие-то промежуточные результаты. Затем «перебросить» значения из нее в результирующую таблицу:

[pastacode lang=»sql» manual=»—%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F%20%D1%82%D0%B8%D0%BF%D0%B0%20%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F%20%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B0%3A%0Adeclare%20%40t%20table%20(temp_field1%20int%2C%20temp_field2%20int%2C%20temp_field3%20int)%3B%0A—%3C%D0%BA%D0%B0%D0%BA%D0%B8%D0%B5-%D1%82%D0%BE%20%D0%B4%D0%B5%D0%B9%D1%81%D1%82%D0%B2%D0%B8%D1%8F%20%D1%81%20%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B5%D0%B9%3E%0A—%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D1%8C%20%D0%B2%20%D1%80%D0%B5%D0%B7%D1%83%D0%BB%D1%8C%D1%82%D0%B8%D1%80%D1%83%D1%8E%D1%89%D1%83%D1%8E%20%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D1%83%0Ainsert%20into%20%40result_table%0Aselect%20*%20from%20%40t%3B%0Areturn%3B» message=»Microsoft SQL Server» highlight=»» provider=»manual»/]

В PostgreSQL все проще: можно использовать «сложносочиненные» запросы и просто вернуться в качестве выборки (упрощенный пример):

[pastacode lang=»sql» manual=»return%20query%20select%20product_code%2C%20%0A(select%20sum(cost)*10%20from%20kassa%20where%20product_id%20%3D%20pId)%2C%20%0A(select%20sum(amount)%20from%20store%20where%20product_id%20%3D%20pId)%0Afrom%20products%0Awhere%20product_id%20%3D%20pId%3B» message=»PostgreSQL» highlight=»» provider=»manual»/]

Функция, возвращающая таблицу returns table — в PostgreSQL и MS SQL Server: 1 комментарий

Оставьте своё мнение...

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.