Перейти к основному содержимому
Версия: 4.x

Оператор FORMULA

Оператор FORMULA - создание свойства, реализующего пользовательскую формулу.

Синтаксис

FORMULA [NULL] [className] [syntaxType1] text1, ..., [syntaxTypeN] textN

Описание

Оператор FORMULA создает свойство, выполняющее произвольную формулу на языке SQL. При этом есть возможность задать формулу отдельно для различных диалектов SQL, для того, чтобы эти свойства были переносимы между различными СУБД.

Этот оператор-свойство не может использоваться внутри выражений.

Параметры

  • NULL

    Ключевое слово, указывающее на то, что создаваемое свойство может возвращать NULL, если все значения параметров не равны NULL. Если оно не указано, то свойство должно быть определено так, чтобы для не NULL параметров всегда возвращать не NULL значение (невыполнение этого условия может привести к непредсказуемым результатам)

  • className

    Имя встроенного класса возвращаемого свойством значения. Если не задано, результирующим классом считается общий предок всех операндов свойства.

  • syntaxType1, ..., syntaxTypeN

    Ключевые слова, определяющие типы диалектов SQL. На данный момент поддерживаются следующие типы:

    • PG - синтаксис PostgreSQL
    • MS - синтаксис MS SQL Server

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

  • text1, ..., textN

    Строковые литералы, каждый из которых содержит формулу в SQL синтаксисе. Для передачи параметров свойства в формулу используется обозначения $1, $2 и т.д., где число обозначает номер параметра свойства. Номера параметров начинаются с единицы. Количество параметров в создаваемом свойстве будет равняться максимальному номеру параметра, указанному в описании формулы.

Примеры

// свойство с двумя параметрами: округляемым числом и количеством знаков после запятой
round(number, digits) = FORMULA 'round(CAST(($1) as numeric),$2)';

// свойство, преобразовывающее значение, переданное в качестве аргумента, к строковому типу длиной в 15 символов.
toString15(str) = FORMULA BPSTRING[15] 'CAST($1 AS character(15))';

// свойство с двумя различными реализациями для разных диалектов SQL
jumpWorkdays = FORMULA NULL DATE PG 'jumpWorkdays($1, $2, $3)', MS 'dbo.jumpWorkdays($1, $2, $3)';