Оператор FORMULA
Оператор FORMULA
- создание свойства, реализующего пользовательскую формулу.
Синтаксис
FORMULA [NULL] [className] [syntaxType1] text1, ..., [syntaxTypeN] textN
Описание
Оператор FORMULA
создает свойство, выполняющее произвольную формулу на языке SQL. При этом есть возможность задать формулу отдельно для различных диалектов SQL, для того, чтобы эти свойства были переносимы между различными СУБД.
Этот оператор-свойство не может использоваться внутри выражений.
Параметры
-
NULL
Ключевое слово, указывающее на то, что создаваемое свойство может возвращать
NULL
, если все значения параметров не равныNULL
. Если оно не указано, то свойство должно быть определено так, чтобы для неNULL
параметров всегда возвращать неNULL
значение (невыполнение этого условия может привести к непредсказуемым результатам) -
className
Имя встроенного класса возвращаемого свойством значения. Если не задано, результирующим классом считается общий предок всех операндов свойства.
-
syntaxType1, ..., syntaxTypeN
Ключевые слова, определяющие типы диалектов SQL. На данный момент поддерживаются следующие типы:
PG
- синтаксис PostgreSQLMS
- синтаксис 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)';