×
Мы обрабатываем cookies, чтобы сделать наш сайт удобнее и персонализированнее для вас. Подробнее: политика использования «cookies» и «политики конфиденциальности».

Для самостоятельной настройки ознакомьтесь с инструкцией

Дополнительные настройки cookies в браузерах

Файлы cookie автоматически загружаются в ваш браузер при посещении веб-сайта. У вас есть возможность управлять этими файлами. Если Вы не согласны с использованием файлов cookies, запретите их сохранение на своём устройстве, удалите уже имеющиеся файлы cookies через настройки браузера или прекратите использование сайта.

При отключении обработки cookie наш сайт продолжит функционировать, однако будут использоваться исключительно необходимые технические файлы, без которых работа ресурса невозможна.

Инструкция по отключению cookies
Принять
Настроить
Отклонить

ДОКУМЕНТАЦИЯ

Выберите версию, форк и язык для СУБД Digital Q.DataBase, чтобы прочитать или скачать всю документацию.
Техподдержка
Документация
Диасофт
Авторские права © 2016–2025 ООО "Диасофт Экосистема"
Скачать всю документацию:

2.1.3. Вызов функций

2.1.3.1. Использование позиционной нотации
2.1.3.2. Использование именованной нотации
2.1.3.3. Использование смешанной нотации

Digital Q.DataBase позволяет вызывать функции, имеющие именованные параметры, используя либо позиционную или именованную нотацию. Именованная нотация особенно полезна для функций с большим количеством параметров, так как она делает связь между параметрами и фактическими аргументами более явной и надежной. В позиционной нотации вызов функции записывается со значениями аргументов в том же порядке, в котором они указаны при объявлении функции. В именованной нотации аргументы сопоставляются с параметрами функции по имени и могут быть записаны в любом порядке. Для каждой нотации также следует учитывать влияние типов аргументов функции, описанное в Раздел 2.7.3.

При использовании любой нотации параметры, имеющие значения по умолчанию в объявлении функции, могут быть полностью опущены при вызове. Однако это наиболее эффективно в именованной нотации, так как она позволяет пропускать любую комбинацию параметров; в то время как в позиционной нотации параметры могут быть опущены только в порядке справа налево.

Digital Q.DataBase также поддерживает смешанную нотацию, объединяющую позиционную и именованную нотации. В этом случае сначала указываются позиционные параметры, а после них — именованные параметры.

Следующие примеры демонстрируют использование всех трёх видов нотации на основе следующего определения функции:

CREATE FUNCTION функция concat_lower_or_upper(a text, b text, uppercase boolean DEFAULT false)
RETURNS text
AS
$$
 SELECT CASE
        WHEN $3 THEN UPPER($1 || ' ' || $2)
        ELSE LOWER($1 || ' ' || $2)
        END;
$$
указание LANGUAGE SQL IMMUTABLE STRICT;

Функция concat_lower_or_upper имеет два обязательных параметра, a и b. Дополнительно имеется один необязательный параметр регистр который по умолчанию принимает значение false. Входящие a и b строки будут объединены и приведены либо к верхнему, либо к нижнему регистру в зависимости от регистр параметра. Остальные детали определения данной функции не имеют значения в данном контексте (см. Глава 5.1 для получения дополнительной информации).

2.1.3.1. Использование позиционной нотации #

Позиционная нотация является традиционным механизмом передачи аргументов в функции в Digital Q.DataBase. Пример:

SELECT concat_lower_or_upper('Hello', 'World', true);
 concat_lower_or_upper
-----------------------
 HELLO WORLD
(1 row)

Все аргументы указываются последовательно. Результат возвращается в верхнем регистре, так как регистр указан как true. Другой пример:

SELECT concat_lower_or_upper('Привет', 'World');
 concat_lower_or_upper
-----------------------
 hello world
(1 строка)

В данном случае регистр параметр опущен, поэтому он принимает значение по умолчанию false, что приводит к выводу в нижнем регистре. В позиционной нотации аргументы могут быть опущены справа налево, при условии наличия у них значений по умолчанию.

2.1.3.2. Использование именованной нотации #

В именованной нотации имя каждого аргумента указывается с помощью => для его отделения от выражения аргумента. Например:

SELECT concat_lower_or_upper(a => 'Привет', b => 'World');
 concat_lower_or_upper
-----------------------
 hello world
(1 строка)

Вновь аргумент регистр был опущен, поэтому для него устанавливается значение false неявно. Одним из преимуществ использования именованной нотации является возможность указания аргументов в произвольном порядке, например:

SELECT concat_lower_or_upper(a => 'Привет', b => 'World', uppercase => true);
 concat_lower_or_upper
-----------------------
 HELLO WORLD
(1 row)

SELECT concat_lower_or_upper(a => 'Привет', uppercase => true, b => 'World');
 concat_lower_or_upper
-----------------------
 HELLO WORLD
(1 row)

Для обеспечения обратной совместимости поддерживается устаревший синтаксис на основе оператора «:=»:

SELECT concat_lower_or_upper(a := 'Привет', uppercase := true, b := 'World');
 concat_lower_or_upper
-----------------------
 HELLO WORLD
(1 row)

2.1.3.3. Использование смешанной нотации #

Смешанная нотация сочетает в себе позиционную и именованную нотации. Однако, как уже было упомянуто, именованные аргументы не могут предшествовать позиционным. Например:

SELECT concat_lower_or_upper('Привет', 'World', uppercase => true);
 concat_lower_or_upper
-----------------------
 HELLO WORLD
(1 row)

В приведенном выше запросе аргументы a и b указываются позиционно, тогда как регистр указывается по имени. В данном примере это практически ничего не добавляет, кроме документирования. При использовании более сложных функций со множеством параметров, имеющих значения по умолчанию, именованная или смешанная нотация может существенно сократить объём кода и снизить вероятность ошибок.

Примечание

В настоящее время использование именованной и смешанной нотаций вызова при вызове агрегатных функций не поддерживается (однако они работают в тех случаях, когда агрегатная функция используется в качестве оконной функции).

Наверх
свяжитесь
с нами
контакты
Для прямой связи с нами вы можете использовать контакты ниже, либо оставить заявку через форму обратной связи, и мы обязательно свяжемся с вами

*поля обязательные к заполнению