Sql

Postgresql функции: PostgreSQL : Документация: 9.4: Функции на языке запросов (SQL) : Компания Postgres Professional

Содержание

Написание табличной функции на 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 — Oracle PL/SQL •MySQL •MariaDB •SQL Server •SQLite

Функция & Описание
BTRIM
Функция PostgreSQL btrim удаляет все указанные символы как в начале, так и в конце строки.
CHAR_LENGTH
Функция char_length в PostgreSQL возвращает длину указанной строки.
CHARACTER_LENGTH
Функция character_length в PostgreSQL возвращает длину указанной строки.
INITCAP
Функция initcap PostgreSQL преобразует первую букву каждого слова в верхний регистр, а все остальные буквы преобразуются в нижний регистр.
LENGTH
Функция length PostgreSQL возвращает длину указанной строки, выраженную количеством символов.
LOWER
Функция lower PostgreSQL преобразует все символы указанной строки в нижний регистр.
LPAD
Функция PostgreSQL lpad возвращает строку, дополненную с левой стороны указанной строкой определенной длины.
LTRIM
Функция ltrim PostgreSQL удаляет все указанные символы в левой части строки.
POSTGRESQL оператор ||
PostgreSQL оператор || позволяет объединять 2 или более строк вместе.
POSITION
Функция position PostgreSQL возвращает местоположение подстроки в строке.
REPEAT
Функция repeat PostgreSQL повторяет строку указанное количество раз.
REPLACE
Функция replace PostgreSQL заменяет все вхождения указанной строки.
RPAD
Функция PostgreSQL rpad возвращает строку, дополненную c правой стороны указанной строкой определенной длины.
RTRIM
Функция PostgreSQL rtrim удаляет все указанные символы в правой части строки.
STRPOS
Функция PostgreSQL strpos возвращает расположение подстроки в строке.
SUBSTRING
Функция substring PostgreSQL позволяет извлечь подстроку из строки.
TRANSLATE
Функция translate PostgreSQL заменяет последовательность символов в строке другим набором символов. Тем не менее, она заменяет один символ за раз.
Например, она заменит первый символ в string_to_replace на первый символ в replace_string. Затем она заменит второй символ в string_to_replace на второй символ в replace_string и т.д.
TRIM
Функция trim PostgreSQL удаляет все указанные символы из начала или конца строки.
UPPER
PostgreSQL функция upper upperпреобразует все символы в указанной строке в верхний регистр.

Как я могу получить список всех функций, хранящихся в базе данных конкретной схемы в 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С.

 

 

Facebook

Twitter

Мой мир

Вконтакте

Одноклассники

Google+

Похожее

Пример функции

PostgreSQL | ObjectRocket

Введение

Когда вы работаете с PostgreSQL, может быть определенная серия операторов SQL или запросов, которые вы выполняете снова и снова. Один из способов сделать задачу более эффективной - упаковать эти операторы в функцию PostgreSQL, также известную как хранимая процедура. Создание функции позволяет вам выполнять целую серию операторов или запросов, вызывая только одно имя функции. В этой статье мы предоставим примеры функций PostgreSQL, которые иллюстрируют, как создается и используется типичная функция.

Предварительные требования

Прежде чем мы начнем с нашего учебника, нам нужно проверить все предварительные условия, которые могут потребоваться для выполнения задачи. В этом случае необходимо выполнить только одно предварительное условие: на вашем компьютере должен быть установлен кластер базы данных PostgreSQL. Чтобы проверить, установлен ли PostgreSQL, просто используйте команду psql -V .

Подключиться к psql

Первое, что нам нужно сделать, это получить доступ к нашему кластеру базы данных PostgreSQL.Сделаем это с помощью следующей команды в терминале:

Эта команда запросит пароль для предоставления привилегий root. После ввода пароля просто нажмите ENTER и введите следующую команду:

Функция PostgreSQL

Функция PostgreSQL - это оператор процедуры, который позволяет объединить несколько операторов или запросов в многократно используемый фрагмент кода. В PostgreSQL функции также известны как хранимые процедуры.

Вот основной синтаксис, используемый при создании функции PostgreSQL:

1
2
3
4
5
6
7
8

СОЗДАТЬ ФУНКЦИЮ имя_функции (аргументы)
ВОЗВРАЩАЕТ тип_данных как $ var_name $
DECLARE declare_variable;
BEGIN
-function_statement-
RETURN var_name;
END;
$ var_name $ LANGUAGE plpgsql;

Давайте разберем этот код построчно:

  • CREATE FUNCTION - создает функцию, а также указывает ее имя

  • RETURNS / RETURN - указывает, какое значение возвращается, когда функция завершает свою задачу

  • DECLARE - используется для инициализации значения для объявления переменной

  • function_statement - содержит исполняемые части инструкции функции

  • BEGIN - указывает транзакцию, которая запустит функцию

  • END - указывает конец транзакции

  • plpgsql - определяет язык, на котором функция будет реализована

Создать базу данных и таблицу

Нам понадобится база данных и таблица для работы, когда мы продемонстрируем наши примеры функций PostgreSQL, поэтому давайте создадим их дальше.Начнем с нашей базы данных:

1

СОЗДАТЬ БАЗУ ДАННЫХ your_dbname;

После создания базы данных используйте команду \ c , чтобы войти в базу данных и создать таблицу.

Чтобы создать таблицу в PostgreSQL, мы воспользуемся командой, показанной ниже:

1
2
3

СОЗДАТЬ ТАБЛИЦУ your_tblname (
COL_NAME + DATA_TYPE + CONSTRAINTS [OPTIONAL]
);

Затем мы можем вставить несколько записей в таблицу с помощью оператора INSERT :

1
2

INSERT INTO your_tblname (COL1, COL2, COL3)
VALUES (VAL1, VAL2, VAL3);

Пример функции PostgreSQL

Теперь, когда мы создали базу данных и таблицу, мы готовы создать нашу функцию.Представим, что у нас есть таблица сотрудников, содержащая всего 201 запись. Мы можем создать функцию, которая считает все записи внутри таблицы:

1
2
3
4
5
6
7
8

СОЗДАТЬ ИЛИ ЗАМЕНИТЬ ФУНКЦИОНАЛЬНЫЕ записи ()
RETURNS INTEGER AS $ total_employee
$ DECLARE total_employee INTEGER;
НАЧАТЬ
ВЫБРАТЬ СЧЕТЧИК (*) ИДЕНТИФИКАТОР INTO total_employee ИЗ сотрудника;
ВОЗВРАТ total_employee;
END;
$ total_employee $ LANGUAGE plpgsql;

ПРИМЕЧАНИЕ: Вы можете использовать REPLACE при объявлении имени функции, чтобы изменить функцию, если она уже была создана.

Теперь давайте воспользуемся оператором SELECT для вызова созданной нами функции:

1
2
3
4
5

SELECT записей ();
записей
---------
201
(1 РЯД)

Заключение

Создание функций - это простой способ сделать вашу работу с 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 | Микро Фокус

  • Корпоративный обмен сообщениями

    Электронная почта, мгновенные сообщения, командная работа в чате, антивирус, защита от спама, аварийное восстановление и многое другое

  • Filr

    Обеспечивает безопасный доступ к файлам и совместное использование с любого устройства

  • GroupWise

    Обеспечивает безопасную электронную почту, календарь и управление задачами для современного мобильного мира

  • Аварийное восстановление GroupWise

    Решение для резервного копирования и аварийного восстановления, обеспечивающее постоянную доступность важной электронной почты

  • Open Workgroup Suite

    Семь основных инструментов для создания ИТ-инфраструктуры, включая безопасный обмен файлами

  • Vibe

    Обеспечивает безопасное командное сотрудничество с функциями управления документами и документооборота

  • .

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *