Написание табличной функции на PL/pgSQL — функция, которая возвращает таблицу | Info-Comp.ru
Продолжаем осваивать PL/pgSQL и сегодня мы рассмотрим примеры того, как можно написать функцию, которая возвращала бы не одно значение, а целую таблицу, то есть, табличные функции. Вам это может потребоваться, например, тогда, когда Вам нужно передавать в функцию параметры, выполнять какие-то расчеты и при этом нужно чтобы она вернула нам целую таблицу, так сказать уже рассчитанную, к которой в свою очередь, также можно обращаться и писать сложные запросы с различными объединениями.
Все примеры мы будем писать в СУБД PostgreSQL. Материал в данной статье подразумевает, что Вы уже знаете основы написания функций в PostgreSql, если нет, то для начала Вам необходимо ознакомиться с основами, в этом Вам поможет вот этот урок — Как написать функцию на PL/pgSQL.
Начнем с самого простого примера, в котором мы просто напишем функцию и передадим ей параметр, в результате выполнения она вернет нам таблицу, учитывая наш параметр.
Допустим, у нас есть вот такая таблица:
id | number | name | znach |
1 | 111 | mike | 10 |
2 | 222 | peter | 20 |
3 | 333 | eric | 10 |
Создание табличной функции на SQL в PostgreSQL
Давайте представим, что нам нужно выбрать всех с тем значением, которое мы укажем в передаваемом параметре, допустим по полю znach. Функция будет выглядеть следующим образом:
CREATE OR REPLACE FUNCTION work.fun_test (IN integer) RETURNS TABLE (id numeric, number numeric, name text, znach numeric) AS $BODY$ select * from work.test where znach = $1 $BODY$ LANGUAGE 'sql' VOLATILE COST 100 ROWS 1000; ALTER FUNCTION work.fun_test (integer) OWNER TO postgres;
Ключевым моментом здесь является то, что мы указываем тип возвращаемого значения TABLE и перечисляем все поля, которые мы хотим получить с указанием их типа.
Для того чтобы увидеть результат выполнения функции, выполните вот такой запрос:
select * from work.fun_test (10)
где, 10 и есть то значение параметра, по которому мы хотим сделать выборку.
Передавать параметров можно много, также можно в самом запросе на выборку использовать и другие функции.
В этом примере мы использовали язык SQL без использования различных приемов программирования, например, условий (if then else), циклов (for) и других.
Создание табличной функции на PL/pgSQL
Теперь давайте попробуем написать тот же самый пример, но уже на PL/pgSQL.
Функция будет выглядеть следующим образом:
CREATE OR REPLACE FUNCTION work.fun_test_2 () RETURNS TABLE(id numeric, number numeric, name text, znach numeric) AS $BODY$ DECLARE rec RECORD; BEGIN FOR rec IN EXECUTE 'select * from work.test where znach = 10' LOOP id = rec.id; number =rec.number; name = rec.name; znach = rec.znach; RETURN next; END LOOP; END; $BODY$ LANGUAGE 'plpgsql' VOLATILE COST 100 ROWS 1000; ALTER FUNCTION work.fun_test_2 () OWNER TO postgres;
Здесь таблица возвращается с помощью цикла.
Но таким способом мы не можем передать параметр в запрос, приходиться писать статическое значение, но здесь мы можем уже использовать все возможности PL/pgSQL.
Вызывается она таким же способом, но без параметров, но параметры можно передавать для других действий в этой функции.
select * from work.fun_test_2 ()
Создание табличной функции на PL/pgSQL с использованием курсора
А если Вы все-таки хотите предавать параметры в запрос, это можно сделать с помощью курсоров.
Кстати, можно легко написать две функции, первая просто возвращала бы таблицу, с передачей параметров, а вторая, например, как в предыдущем примере, обрабатывала таблицу, которую вернет первая функция, и соответственно выполняла какие-нибудь другие действия, но вместо запроса, как в предыдущем примере, мы будем использовать cursor, кстати, познакомимся еще и с курсорами (если Вы не хотите писать две функции, вместо вызова первой функции в курсоре, напишите запрос). Функция будет выглядеть следующим образом:
CREATE OR REPLACE FUNCTION work.fun_test_3 (IN numeric) RETURNS TABLE(id numeric, number numeric, name text, znach numeric) AS $BODY$ DECLARE rec RECORD; var ALIAS FOR $1; cur_test CURSOR FOR select * from work.fun_test (var) BEGIN FOR rec IN cur_test LOOP id = rec.id; number =rec.number; name = rec.name; znach = rec.znach; RETURN next; END LOOP; END; $BODY$ LANGUAGE 'plpgsql' VOLATILE COST 100 ROWS 1000; ALTER FUNCTION work.fun_test_3 (numeric) OWNER TO postgres;
Вызывается она также как и все предыдущие:
select * from work.fun_test_3 (10)
Здесь мы с Вами объявили курсор и записали в него результат выполнения нашей функции select * from work.fun_test (var), а потом также циклом перебрали все значения. Помимо всего этого в теле цикла можно выполнять различного рода операции, доступные в PL/pgSQL, например, отработка условий if then else.
В итоге мы написали три разные функции, но результат их выполнения один и тот же. Теперь Вы знаете, как сделать так, чтобы функция могла возвращать таблицу, надеюсь, это вам поможет. Удачи!
НравитсяНе нравитсяФункция & Описание |
---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Как я могу получить список всех функций, хранящихся в базе данных конкретной схемы в PostgreSQL?
есть удобная функция, oidvectortypes
, что делает это намного проще.
SELECT format('%I.%I(%s)', ns.nspname, p.proname, oidvectortypes(p.proargtypes))
FROM pg_proc p INNER JOIN pg_namespace ns ON (p.pronamespace = ns.oid)
WHERE ns.nspname = 'my_namespace';
кредит Leo Hsu и Regina Obe в Postgres Online указал oidvectortypes
. Я писал подобные функции раньше, но использовал сложные вложенные выражения, которые эта функция избавляет от необходимости.
см. ответ.
(редактировать в 2016 году)
обобщение типичного отчета опции:
-- Compact: SELECT format('%I.%I(%s)', ns.nspname, p.proname, oidvectortypes(p.proargtypes)) -- With result data type: SELECT format( '%I.%I(%s)=%s', ns.nspname, p.proname, oidvectortypes(p.proargtypes), pg_get_function_result(p.oid) ) -- With complete argument description: SELECT format('%I.%I(%s)', ns.nspname, p.proname, pg_get_function_arguments(p.oid)) -- ... and mixing it. -- All with the same FROM clause: FROM pg_proc p INNER JOIN pg_namespace ns ON (p.pronamespace = ns.oid) WHERE ns.nspname = 'my_namespace';
обратите внимание используйте p.proname||'_'||p.oid AS specific_name
чтобы получить уникальные имена, или присоединиться к information_schema
таблицы — см. routines
и parameters
на ответ @ RuddZwolinski.
функции OID (см. pg_catalog.pg_proc
) и функции specific_name (см. information_schema.routines
) являются основными опциями для функций. Ниже приведены некоторые полезные функции в отчетности и других контекстах._]+)$’, »)::int)
$$ LANGUAGE SQL IMMUTABLE; — — — — —
— User customization: CREATE FUNCTION pg_get_function_arguments2(p_specific_name text) RETURNS text AS $$
— Example of «special layout» version.
SELECT trim(array_agg( op||’-‘||dt )::text,'{}’)
FROM (
SELECT data_type::text as dt, ordinal_position as op
FROM information_schema.parameters
WHERE specific_name = p_specific_name
ORDER BY ordinal_position
) t
$$ LANGUAGE SQL IMMUTABLE;
Иллюстрированный самоучитель по PostgreSQL › Команды PostgreSQL › CREATE FUNCTION [страница — 325] | Самоучители по программированию
CREATE FUNCTION
Определение новой функции в базе данных.
Синтаксис:
CREATE FUNCTION имя ([ тип_аргумента [….] ]) RETURNS тип_возвращаемого_значения AS 'определение' LANGUAGE 'язык' [ WITH (атрибут [….]) ] CREATE FUNCTION имя ([ тип_аргумента [….] ]) RETURNS тип_возвращаемого_значения AS 'объектный_файл' [, 'имя_в_объектном_файле' ] LANGUAGE 'язык' [ WITH (атрибут […;]) ]
Параметры:
- имя. Имя создаваемой функции.
- тип_аргумента. Тип данных аргумента (или аргументов), получаемого функцией. Существуют три категории типов данных: базовые типы, сложные типы и специальный тип opaque. Тип opaque разрешает передачу аргументов, не относящихся к допустимым типам SQL. Обычно он используется внутренними функциями, а также функциями, написанными на языках С, PL/pgSQL и т. д., в которых возвращаемое значение не относится к стандартным типам данных SQL.
- тип_возвращаемого_значения. Тип данных возвращаемого значения (или значений) функции. Может относиться к базовому типу, сложному типу, типу setof (обычный тип данных с префиксом setof) или типу opaque. Модификатор setof указывает на то, что функция возвращает несколько записей данных (по умолчанию возвращается только одна запись). Например, тип возвращаемого значения setof i nteger создает функцию, которая может возвращать несколько записей типа integer.
- атрибут. Необязательный атрибут функции. В PostgreSQL 7.1.x поддерживаются два атрибута, isstrict и iscacheable.
- определение. Определение создаваемой функции. Задается в виде строки, заключенной в апострофы, хотя ее содержимое в значительной мере зависит от языка программирования. В строке может передаваться внутреннее имя функции, команда SQL или процедурный код (в таких языках, как PL/pgSQL).
- объектный_файл [, имя_в_объектном_файле ]. Файл, содержащий динамически загружаемый объектный код, и имя функции в исходном коде на языке С. Второй параметр обязателен лишь в том случае, если имя исходной функции на языке С отличается от имени функции SQL.
- язык. Название языка, на котором написана функция. Допустимыми значениями являются С, SQL, Internal или имя любого процедурного языка, поддержка которого была установлена командой CREATE LANGUAGE (например, plpgsql). За дополнительной информацией обращайтесь к описанию команды CREATE LANGUAGE.
Результаты:
CREATE. Это сообщение возвращается при успешном создании функции.
Описание
Команда CREATE FUNCTION создает новую функцию в текущей базе данных. Владельцем функции становится создавший ее пользователь PostgreSQL.
Атрибуты функции:
- iscachable. Атрибут означает, что функция всегда возвращает постоянный результат при одинаковых значениях аргументов (то есть вычисленные результаты могут кэшироваться). Такие функции не берут информацию из базы данных и не используют информацию, не включенную в список параметров. По значению атрибута оптимизатор узнает о том, что вместо повторного выполнения функции можно воспользоваться результатом предыдущего вызова с теми же аргументами.
- isstrict. Атрибут Isstrict означает, что в функции реализована жесткая проверка псевдозначений NULL. В этом случае при вызове с аргументом NULL функция не выполняет никаких действий и сразу возвращает результат NULL.
Перегрузка функций
В PostgreSQL поддерживается перегрузка функций. Вероятно, этот термин хорошо знаком всем программистам, работающим с объектно-ориентированными языками – под ним понимается определение нескольких функций с одинаковыми именами при условии, что каждая из них получает уникальный набор аргументов.
Перегрузка создает видимость того, что одна функция работает с разными типами входных данных. С точки зрения пользователя серия функций превращается в универсальное и удобное средство для выполнения конкретной задачи.
В отличие от функций PostgreSQL, перегружаемых по типам аргументов, откомпилированные функции С, находящиеся в одном объектном файле, не могут обладать одинаковыми именами. Чтобы справиться с этой проблемой, присвойте второй функции С, которую вы собираетесь перегрузить в PostgreSQL, любое уникальное имя в исходном файле С, откомпилируйте и затем передайте это имя в параметре имя_в_объектном_файле при создании перегруженной функции.
Примеры
В следующем примере создается простая функция SQL, которая возвращает название книги по ее коду, переданному функции:
booktown=# CREATE FUNCTION title(integer) RETURNS text booktown-# AS 'SELECT title from books where id – $1' booktown-# LANGUAGE 'sql': CREATE
Теперь функция title() может использоваться в базе данных booktown для выборки записей, у которых поле id совпадает с переданным числовым аргументом:
booktown=# SELECT title(41472) AS book_title; book title Practical PostgreSQL (1 row)
Строка подключения к СУБД PostgreSQL
Как в 1С обратиться к внешнему источнику данных, который таится в недрах СУБД? Ответ на этот вопрос начинается с подключения в 1С к этому источнику данных через интерфейс COM-объекта. В этой статье рассмотрим подключение с помощью интерфейса ADODB. Свои попытки мы будем осуществлять с СУБД PostgreSQL.
Строка подключения
Подключение клиента 1С к серверу любой СУБД осуществляется при помощи строки подключения. У каждой СУБД они немного отличаются.
Рассмотрим, какие же параметры содержит в себе строка подключения:
Параметр | Описание параметра | Значение параметра |
DRIVER | Драйвер СУБД ODBC | PostgreSQL Unicode |
Data Source | Источник данных | PostgreSQL35W |
SERVER | Имя сервера СУБД | srv1 |
PORT | Номер порта сервера СУБД | 5432 |
DATABASE | Имя БД | parser |
UID | Имя пользователя СУБД | sauser |
PWD | Пароль пользователя СУБД | ******** |
С этими параметрами строка подключения будет выглядеть так:
DRIVER={PostgreSQL Unicode}; Data Source=PostgreSQL35W; SERVER=srv1; PORT=5432; DATABASE=parser; UID=sauser; PWD=qwerty
Настройки сервера СУБД
Перед тем, как соединяться с БД, необходимо настроить сервер СУБД PostgreSQL. Это делается так:
1. Идём в меню Пуск – Панель управления – Система и безопасность – Администрирование.
2. Выбираем пункт «Источники данных ODBC» (64- или 32-разрядная версия в зависимости от разрядности архитектуры клиента и сервера).
3. На вкладке «Драйверы» должен присутствовать «PostgreSQL ODBC Driver(UNICODE)» или «PostgreSQL ODBC Driver(ANSI)».
4. На вкладке «Системный DNS» должен присутствовать источник данных «PostgreSQL35W». Если такого источника данных нет, его нужно добавить, прописав: имя используемой БД, сервер, имя пользователя и пароль. Если СУБД PostgreSQL установлена на этом же компьютере, то сервер должен иметь имя «localhost».
5. Чтобы протестировать созданное соединение, в окне источника данных нажимаем кнопку «Test». После удачного тестирования появляется окно.
6. Если всё прошло удачно, сохраняем результат, нажимаем кнопку «Save».
Функции подключения 1С
Теперь для того, чтобы подключить 1С Предприятие к СУБД PostgreSQL, можно использовать следующие готовые функции:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | Функция ОткрытьПодключение(СтрокаКоннекта, ТаймАут) Экспорт Соединение = Новый COMОбъект("ADODB.Connection"); Соединение.ConnectionTimeOut = Число(ТаймАут); Попытка Соединение.Open(СтрокаКоннекта); Исключение Сообщить(ОписаниеОшибки(), СтатусСообщения.ОченьВажное); Возврат Неопределено; КонецПопытки; Возврат Соединение; КонецФункции Процедура ЗакрытьПодключение(Соединение) Экспорт Попытка Если Соединение <> Неопределено Тогда Соединение.Close(); КонецЕсли; Исключение Сообщить(ОписаниеОшибки(), СтатусСообщения.ОченьВажное); КонецПопытки; Соединение = Неопределено; КонецПроцедуры; |
Как обратиться к внешней СУБД? Пишем в модуле 1С такую конструкцию:
1 2 3 4 | СтрокаСоединения = "DRIVER={PostgreSQL Unicode}; Data Source=PostgreSQL35W; SERVER=srv1; PORT=5432; DATABASE=parser; UID=sauser; PWD=qwerty"; Соединение = ОткрытьПодключение(СтрокаСоединения, 120); // Обращение к БД ЗакрытьПодключение(Соединение); |
Обработку для тестирования соединения с БД можно скачать ниже по ссылке. Обработка сделана как для управляемых форм, так и для обычного интерфейса 1С.
Мой мир
Вконтакте
Одноклассники
Google+
Похожее
Пример функцииPostgreSQL | ObjectRocket
Введение
Когда вы работаете с PostgreSQL, может быть определенная серия операторов SQL или запросов, которые вы выполняете снова и снова. Один из способов сделать задачу более эффективной — упаковать эти операторы в функцию PostgreSQL, также известную как хранимая процедура. Создание функции позволяет вам выполнять целую серию операторов или запросов, вызывая только одно имя функции. В этой статье мы предоставим примеры функций PostgreSQL, которые иллюстрируют, как создается и используется типичная функция.
Предварительные требования
Прежде чем мы начнем с нашего учебника, нам нужно проверить все предварительные условия, которые могут потребоваться для выполнения задачи. В этом случае необходимо выполнить только одно предварительное условие: на вашем компьютере должен быть установлен кластер базы данных PostgreSQL. Чтобы проверить, установлен ли PostgreSQL, просто используйте команду psql -V
.
Подключиться к psql
Первое, что нам нужно сделать, это получить доступ к нашему кластеру базы данных PostgreSQL.Сделаем это с помощью следующей команды в терминале:
Эта команда запросит пароль для предоставления привилегий root. После ввода пароля просто нажмите ENTER и введите следующую команду:
Функция PostgreSQL
Функция PostgreSQL — это оператор процедуры, который позволяет объединить несколько операторов или запросов в многократно используемый фрагмент кода. В PostgreSQL функции также известны как хранимые процедуры.
Вот основной синтаксис, используемый при создании функции PostgreSQL:
1 | СОЗДАТЬ ФУНКЦИЮ имя_функции (аргументы) |
Давайте разберем этот код построчно:
CREATE FUNCTION
— создает функцию, а также указывает ее имяRETURNS / RETURN
— указывает, какое значение возвращается, когда функция завершает свою задачуDECLARE
— используется для инициализации значения для объявления переменнойfunction_statement
— содержит исполняемые части инструкции функцииBEGIN
— указывает транзакцию, которая запустит функциюEND
— указывает конец транзакцииplpgsql
— определяет язык, на котором функция будет реализована
Создать базу данных и таблицу
Нам понадобится база данных и таблица для работы, когда мы продемонстрируем наши примеры функций PostgreSQL, поэтому давайте создадим их дальше.Начнем с нашей базы данных:
1 | СОЗДАТЬ БАЗУ ДАННЫХ your_dbname; |
После создания базы данных используйте команду \ c
, чтобы войти в базу данных и создать таблицу.
Чтобы создать таблицу в PostgreSQL, мы воспользуемся командой, показанной ниже:
1 | СОЗДАТЬ ТАБЛИЦУ your_tblname ( |
Затем мы можем вставить несколько записей в таблицу с помощью оператора INSERT
:
1 | INSERT INTO your_tblname (COL1, COL2, COL3) |
Пример функции PostgreSQL
Теперь, когда мы создали базу данных и таблицу, мы готовы создать нашу функцию.Представим, что у нас есть таблица сотрудников, содержащая всего 201 запись. Мы можем создать функцию, которая считает все записи внутри таблицы:
1 | СОЗДАТЬ ИЛИ ЗАМЕНИТЬ ФУНКЦИОНАЛЬНЫЕ записи () |
ПРИМЕЧАНИЕ: Вы можете использовать REPLACE
при объявлении имени функции, чтобы изменить функцию, если она уже была создана.
Теперь давайте воспользуемся оператором SELECT
для вызова созданной нами функции:
1 | SELECT записей (); |
Заключение
Создание функций — это простой способ сделать вашу работу с PostgreSQL проще и эффективнее. Когда вы создаете функцию, вы можете заключить несколько операторов SQL и запросов в многократно используемый фрагмент кода, который может быть выполнен с помощью одного вызова функции.В этой статье мы представили пример функции PostgreSQL, который показал, как создать и вызвать типичную функцию. С помощью этого примера и наших пошаговых инструкций вы сможете создавать свои собственные функции для упрощения задач PostgreSQL.
Список пользовательских функций (UDF) в базе данных PostgreSQL
Запрос ниже возвращает все определяемые пользователем функции и информацию о них в базе данных PostgreSQL.
Примечание
PostgreSQL 11 вводит процедуры, поэтому нам нужно различать процедуры и функции.В этом случае используйте: PostgreSQL 11 Query
Универсальный
Запрос
выберите n.nspname как function_schema,
p.proname как имя_функции,
l.lanname как function_language,
если l.lanname = 'internal', тогда p.prosrc
иначе pg_get_functiondef (p.oid)
конец как определение,
pg_get_function_arguments (p.oid) как function_arguments,
t.typname как return_type
из pg_proc p
левое соединение pg_namespace n на p.pronamespace = n.Oid
левое соединение pg_language l на p.prolang = l.oid
левое соединение pg_type t на t.oid = p.prorettype
где n.nspname отсутствует в ('pg_catalog', 'information_schema')
заказать по схеме_функции,
имя_функции;
Колонны
- function_schema — имя схемы, содержащей функцию
- function_name — имя функции
- function_language — язык, на котором написана функция
- определение — фактический исходный код функции для интерпретируемых языков, символ ссылки или имя файла (в зависимости от языка)
- function_arguments — тип аргументов функции
- return_type — тип возвращаемого значения функции
Рядов
- Одна строка — представляет одну функцию
- Объем строк: — все функции в базе данных
- Заказано — схема функции, имя функции
Пример результатов
PostgreSQL 11+
Запрос
выберите n.nspname как schema_name,
p.proname как specific_name,
чехол p.prokind
когда 'f', затем 'ФУНКЦИЯ'
когда 'p' затем 'ПРОЦЕДУРА'
когда 'а' затем 'ОБЩИЙ'
когда 'w', затем 'ОКНО'
конец как добрый,
l.lanname как язык,
если l.lanname = 'internal', тогда p.prosrc
иначе pg_get_functiondef (p.oid)
конец как определение,
pg_get_function_arguments (p.oid) в качестве аргументов,
t.typname как return_type
из pg_proc p
левое соединение pg_namespace n на стр.pronamespace = n.oid
левое соединение pg_language l на p.prolang = l.oid
левое соединение pg_type t на t.oid = p.prorettype
где n.nspname отсутствует в ('pg_catalog', 'information_schema')
заказать по schema_name,
конкретное_имя;
Колонны
- schema_name — имя схемы, содержащей функцию / процедуру
- specific_name — имя функции / процедуры
- вид :
- FUNCTION — нормальная функция
- ПРОЦЕДУРА — процедура
- AGGREGATE — агрегатная функция
- WINDOW — оконная функция
- язык — язык, на котором написана функция / процедура
- определение — фактический исходный код функции / процедуры для интерпретируемых языков, символ ссылки или имя файла (в зависимости от языка)
- аргументы — аргументы функции / процедуры
- return_type — тип возврата
Рядов
- Одна строка — представляет одну функцию или процедуру
- Объем строк: — все функции и процедуры в базе данных
- Упорядочено по — имя схемы, конкретное имя
Пример результатов
хранимых процедур и функций в PostgreSQL — начало работы
Хранимая процедура и определяемая пользователем функция (UDF) — это набор операторов SQL и процедурных операторов (объявления, назначения, циклы, поток управления и т. Д.)), который хранится на сервере базы данных и может быть вызван с помощью интерфейса SQL.
Быстрый пример :
- Функция увеличивает входное значение на 1 Приращение CREATE OR REPLACE FUNCTION (i INT) RETURNS INT AS $$ НАЧАТЬ ВОЗВРАТ i + 1; КОНЕЦ; $$ LANGUAGE plpgsql; - Пример использования функции (Возвращает: 11) ВЫБРАТЬ приращение (10);
В PostgreSQL, и хранимые процедуры, и пользовательские функции создаются с помощью оператора CREATE FUNCTION.Существуют различия между и понятием хранимых процедур и функций в системах баз данных:
Таким образом, в большинстве случаев цель хранимой процедуры состоит в следующем:
Выполнять действия без возврата результата (операции INSERT, UPDATE, т. Е.)
Возвращает одно или несколько скалярных значений как параметры OUT
Вернуть один или несколько наборов результатов
Обычно целью пользовательской функции является обработка входных параметров и возврат нового значения.
Инструменты отчетности
Многие инструменты отчетности (Crystal Reports, Reporting Services, инструменты бизнес-аналитики и т. Д.) Позволяют указать запрос (оператор SQL SELECT) или хранимую процедуру, возвращающую набор результатов, чтобы определить набор данных для отчета.
Хранимые процедуры очень полезны, когда вам нужно выполнить сложные вычисления, прежде чем данные станут доступны для отчета.
Обычно хранимые процедуры не возвращают никакого значения и не возвращают один или несколько наборов результатов.
Значение не возвращено
Если хранимая процедура не возвращает никакого значения, вы можете указать void в качестве типа возврата:
- Процедура добавления нового города СОЗДАТЬ ИЛИ ЗАМЕНИТЬ ФУНКЦИЮ add_city (VARCHAR города (70), CHAR состояния (2)) Возврат аннулируется КАК $$ НАЧАТЬ ВСТАВИТЬ ЦЕННОСТИ города (город, штат); КОНЕЦ; $$ LANGUAGE plpgsql;
Вы можете использовать инструкцию SELECT для вызова процедуры add_city :
- Добавить новый город ВЫБЕРИТЕ add_city ('St.Луи ',' МО ');
Вы также можете использовать оператор PERFORM add_city () для вызова add_city из другой процедуры или функции.
Вернуть единичный набор результатов — Вернуть курсор
Чтобы вернуть набор результатов из процедуры PostgreSQL, вы должны указать refcursor возвращаемый тип, открыть и вернуть курсор:
СОЗДАТЬ ИЛИ ЗАМЕНИТЬ ФУНКЦИЮ show_cities () ВОЗВРАЩАЕТ refcursor AS $$ ЗАЯВИТЬ ref refcursor; НАЧАТЬ ОТКРЫТЬ ref ДЛЯ ВЫБРАТЬ город, штат ИЗ городов; ВОЗВРАТ ref; КОНЕЦ; $$ LANGUAGE plpgsql;
Важное примечание: Курсор остается открытым, пока не завершит транзакции, и поскольку PostgreSQL по умолчанию работает в режиме автоматической фиксации, курсор закрывается сразу после вызова процедуры , поэтому он недоступен для вызывающей стороны.Для работы с курсорами необходимо запустить транзакцию (отключить автофиксацию).
Для получения дополнительной информации см. PostgreSQL — Как вернуть набор результатов из хранимой процедуры.
404 | Микро Фокус
Электронная почта, мгновенные сообщения, командная работа в чате, антивирус, защита от спама, аварийное восстановление и многое другое
Обеспечивает безопасный доступ к файлам и совместное использование с любого устройства
Обеспечивает безопасную электронную почту, календарь и управление задачами для современного мобильного мира
Решение для резервного копирования и аварийного восстановления, обеспечивающее постоянную доступность важной электронной почты
Семь основных инструментов для создания ИТ-инфраструктуры, включая безопасный обмен файлами
Обеспечивает безопасное командное сотрудничество с функциями управления документами и документооборота