PostgreSQL — Оператор CREATE FUNCTION
В операторе CREATE FUNCTION PostgreSQL для разработки пользовательских функций.
Синтаксис: создать [или заменить] функцию имя_функции (список_параметров) возвращает return_type язык plpgsql как $$ объявить -- объявление переменной начинать -- логика конец; $$
Давайте проанализируем приведенный выше синтаксис:
- Сначала укажите имя функции после ключевых слов создания функции. Если вы хотите заменить существующую функцию, вы можете использовать заменяет ключевые слова .
- Затем укажите список параметров функции, заключенный в круглые скобки после имени функции. Функция может иметь ноль или много параметров.
- Затем укажите тип данных возвращаемого значения после того, как вернет ключевое слово .
- После этого используйте язык plpgsql, чтобы указать процедурный язык функции. Обратите внимание, что PostgreSQL поддерживает многие процедурные языки, а не только plpgsql.
- Наконец, поместите блок в строковую константу в долларовых кавычках .
В качестве примера мы будем использовать образец базы данных, то есть dvdrental.
Пример:
Следующий оператор создает функцию, которая подсчитывает фильмы, длина которых находится между параметрами len_from и len_to : возвращает целое язык plpgsql как $$ объявить целое число film_count; начинать выберите количество (*) в число_фильмов из фильма где длина между len_from и len_to; вернуть число_фильмов; конец; $$;
Функция get_film_count имеет два основных раздела: заголовок и тело.
В разделе заголовка:
- Во-первых, имя функции — get_film_count , которое следует за ключевыми словами функции создания.
- Во-вторых, функция get_film_count () принимает два параметра len_from и len_to с целочисленным типом данных.
- В-третьих, get_film_count Функция возвращает целое число, указанное в возвращает int, пункт
- Наконец, язык функции — plpgsql, указанный языком plpgsql.
В разделе Body:
- Используйте долларовые кавычки синтаксис строковой константы , который начинается с $$ и заканчивается на $$. Между этими $$ можно разместить блок, содержащий объявление и логику функции.
- В разделе объявлений объявите переменную с именем film_count , в котором хранится количество фильмов, выбранных из таблицы film .
- В теле блока используйте оператор select into, чтобы выбрать количество фильмов, длина которых находится между
Теперь, когда мы ознакомились со структурой инструкции CREATE FUNCTION, давайте создадим функцию, используя ее.
Сначала запустите интерактивный инструмент psql, подключитесь к базе данных dvdrental и введите приведенный выше код в psql, чтобы создать такую функцию:
create function get_film_count(len_from int, len_to int) возвращает целое язык plpgsql как $$ объявить целое число film_count; начинать выберите количество (*) в число_фильмов из фильма где длина между len_from и len_to; вернуть число_фильмов; конец; $$;
Вы увидите следующее сообщение, если функция создана успешно, как показано ниже:
Наконец, используйте приведенную ниже команду, чтобы перечислить все определенные пользователем в текущей базе данных:
\df
Это покажет вам все пользовательские функции в базе данных, как показано ниже:
Пользовательские функции PostgreSQL — SQLServerCentral
Обзор
В этом руководстве мы узнаем о пользовательских функциях PostgreSQL. Затронутые темы будут такими: что такое функция, определяемая пользователем? Как создавать и использовать пользовательские функции с помощью запросов и графического интерфейса PgAdmin, их преимущества и некоторые примеры.
Что такое определяемая пользователем функция?
Пользовательская функция PostgreSQL — это группа произвольных операторов SQL, предназначенных для выполнения какой-либо задачи. Эти функции не являются стандартными и обычно создаются для обработки конкретных сценариев. Внутри функции можно выполнять операции выбора, вставки, обновления, удаления. Функцию PostgreSQL можно создать на любом языке, таком как SQL, C, PL/pgSQL, Python и т. д. не возможно.
Как создать пользовательскую функцию?
Функцию можно создать двумя способами: либо с помощью кода PostgreSQL, либо с помощью графического интерфейса PgAdmin. Давайте рассмотрим оба варианта.
Базовый синтаксис
В этом синтаксисе имя_функции вместе с количеством аргументов или списком параметров указывается после предложения CREATE OR REPLACE. Затем return_datatype объявляется после ключевого слова RETURNS. return_datatype , по-видимому, является типом данных, возвращаемых функцией. Это может быть один из типов данных PostgreSQL, таких как символ, целое число, двойное число и т. д. Также возможно вернуть таблицу из функции PostgreSQL.
В этом синтаксисе имя_функции вместе с количеством аргументов или списком параметров указывается после предложения CREATE OR REPLACE. Затем
Далее после ключевого слова DECLARE объявляются переменные IN, OUT, используемые в функции. Затем в блоке BEGIN-END определяется function_body . function_body , по-видимому, содержит бизнес-логику функции. Далее после ключевого слова RETURN указывается имя_переменной , которое содержит возвращаемое значение из функции.
Наконец, после ключевого слова LANGUAGE указывается язык ( имя_языка ), на котором создана функция.
СОЗДАТЬ [ИЛИ ЗАМЕНИТЬ] ФУНКЦИЮ имя_функции (аргументы) ВОЗВРАЩАЕТ return_datatype AS $variable_name$ ЗАЯВИТЬ декларация; [...] НАЧИНАТЬ <тело_функции> [.. логика] ВОЗВРАТ {имя_переменной | ценить } КОНЕЦ; LANGUAGE имя_языка;
Запросы можно выполнять либо в оболочке PostgreSQL (PSQL), либо в инструменте запросов PgAdmin.
Пример
Здесь мы создаем функцию, которая возвращает текущую дату и время с сервера.
СОЗДАТЬ ФУНКЦИЮ getTimestamp() ВОЗВРАЩАЕТ временную метку КАК $$ НАЧИНАТЬ ВОЗВРАТ CURRENT_TIMESTAMP; КОНЕЦ; $$ ЯЗЫК PLPGSQL;
Список всех функций в схеме базы данных:
df.*
Выполним приведенную выше функцию: .
Шаг 1-> Перейдите к серверам-> База данных-> Схема-> Функция-> Создать-> Функция, как показано ниже:
Шаг 2 -> Укажите имя, владельца, схему, комментарий, если любой.
Шаг 3-> Укажите аргументы функции, тип возвращаемого значения и язык, как описано в предыдущем разделе.
Шаг 4 -> Укажите бизнес-логику на вкладке «код»
Шаг 5 -> Затем укажите параметры на вкладке «Параметры» и сохраните для создания функции.
Примеры определяемых пользователем функций
Давайте теперь рассмотрим некоторые примеры функций, чтобы лучше понять концепцию.
Примечание : Для выполнения запросов можно использовать инструмент запросов PgAdmins или терминал Psql. В этом руководстве мы использовали инструмент запросов PgAdmin для этой цели. Оба этих редактора входят в состав последних версий PgAdmin.
Пример 1: Добавить 2 числа
Здесь была создана одна функция с именем addNumbers. Эта функция принимает 2 целочисленных параметра на вход и возвращает одно целое число на выходе.
СОЗДАТЬ ФУНКЦИЮ addNumbers(val1 integer, val2 integer) ВОЗВРАЩАЕТ целое число AS $$ НАЧИНАТЬ ВОЗВРАТ ЗНАЧ1 + ЗНАЧ2; КОНЕЦ; $$ ЯЗЫК PLPGSQL;
Вот функция, созданная в PgAdmin:
Функция отображается слева в разделе «Функции».
Давайте теперь выполним функцию, как показано ниже:
Пример 2: В этом примере мы увидим, как выполнить операцию условного выбора внутри функции
Эта функция используется для выполнения операции выбора на таблица под названием «Акции». Функция возвращает все те акции, цена которых меньше входного параметра ‘price_cap’. Переменная, объявленная в разделе declare, содержит выходное значение.
создать функцию get_stocks(price_cap int) возвращает целое язык plpgsql как $$ объявить stock_count целое число; начинать выберите количество (*) в stock_count из публичного."Акции" где stock_price < price_cap; вернуть количество запасов; конец; $$;
Давайте создадим это в PgAdmin.
Давайте посмотрим на данные таблицы:
Теперь выполним функцию, чтобы проверить ее поведение: функция извлекла то же самое.
Пример 3: Возвращает таблицу.
Функция также может использоваться для возврата таблицы, если это необходимо. Мы будем использовать следующую таблицу, чтобы продемонстрировать эту функциональность.
Следующая функция возвращает все акции, цена которых меньше входной цены. Результат будет в виде таблицы.
СОЗДАТЬ ИЛИ ЗАМЕНИТЬ ФУНКЦИЮ get_allStocks (price_cap int) ТАБЛИЦА ВОЗВРАТА ( stock_serial_no целое число, стоковый варчар, price_of_stock ) КАК $$ НАЧИНАТЬ ВОЗВРАТ ЗАПРОСА ВЫБЕРИТЕ stock_id, имя_инвентаря, цена_акции ОТ публичный."Акции" ГДЕ stock_price < price_cap; КОНЕЦ; $$ ЯЗЫК 'plpgsql';
Давайте теперь выполним функцию для проверки вывода.