Пояснения: Спецификация параметра идентифицирует параметр или параметр и индикаторный параметр в модуле (вернее, в процедуре модуля). Спецификация динамического параметра идентифицирует параметр динамически подготовленного оператора. Спецификация переменной идентифицирует переменную включающего языка или такую переменную и индикаторную переменную. Спецификация цели определяет параметр или переменную, которым может быть присвоено значение. Отрицательное значение индикаторных параметра или переменной в спецификации параметра или переменной соответственно означает, что параметр или переменная содержат неопределенное значение. Значение CURRENT_USER есть значение текущего идентификатора авторизации; SESSION_USER - значение идентификатора авторизации SQL-сессии; SYSTEM_USER - определяемая в реализации строка, представляющая пользователя операционной системы, который выполнил оператор SQL, в результате которого было вычислено значение SYSTEM_USER.
Спецификация явного преобразования типа или домена
В SQL/89 существуют только неявные преобразования типов (например, FLOAT к DOUBLE). Конечно, это не всегда удобно, недостаточно гибко и иногда чревато ошибками. В SQL/92 существует специальная конструкция CAST, с помощью которой можно явно преобразовывать типы в пределах допускаемых преобразований. Синтаксис конструкции следующий:
::=
CAST AS
::=
|NULL
::=
|
Пояснения. Примем следующие обозначения типов данных:
EN
- ExactNumeric;
AN
- ApproximateNumeric;
C
- Character (Fixed- orVariable-length);
FC
- Fixed-lengthCharacter;
VC
- Variable-lengthCharacter;
B
- BitString (Fixed- orVariable-length);
FB
- Fixed-lengthBitString;
VB
- Variable-lengthBitString;
D
- Date;
T
- Time;
TS
- Timestamp;
YM
- Year-MonthInterval;
DT
- Day-TimeInterval.
Пусть TD - тип данных, к которому производится преобразование, а SD - тип данных операнда. Тогда допустимы следующие комбинации ("да" означает безусловную допустимость, "нет"- безусловную недопустимость и "?" - допустимость с оговорками):
SD
TD
EN
AN
VC
FC
VB
FB
D
T
TS
YM
DT
EN
Да
Да
Да
Да
Нет
Нет
Нет
Нет
Нет
?
?
AN
Да
Да
Да
Да
Нет
Нет
Нет
Нет
Нет
Нет
Нет
C
Да
Да
?
?
Да
Да
Да
Да
Да
Да
Да
B
Нет
Нет
Да
Да
Да
Да
Нет
Нет
Нет
Нет
Нет
D
Нет
Нет
Да
Да
Нет
Нет
Да
Нет
Да
Нет
Нет
T
Нет
Нет
Да
Да
Нет
Нет
Нет
Да
Да
Нет
Нет
TS
Нет
Нет
Да
Да
Нет
Нет
Да
Да
Да
Нет
Нет
YM
?
Нет
Да
Да
Нет
Нет
Нет
Нет
Нет
Да
Нет
DT
?
Нет
Да
Да
Нет
Нет
Нет
Нет
Нет
Нет
Да
Оговорки состоят в следующем:
Если TD - интервал, и SD - тип точных чисел, то TD должен содержать единственное поле даты-времени;
Если TD - тип точных чисел, и SD - интервал, то SD должен содержать единственное поле даты-времени;
Если SD - тип символьных строк, и TD - тип символьных строк постоянной или переменной длины, то репертуар символов SD и TD должен быть одним и тем же.
Результатом применения оператора CAST к неопределенному значению является неопределенное значение. Для значений, отличных от неопределенных, в стандарте приводятся подробные правила выполнения преобразований, которые интуитивно ясны.
Выражение, вырабатывающее значение
Это общая форма скалярного выражения, включающая все возможные типы результирующих значений. Синтаксис следующий:
::=
|
|
|
::=
|
|
|
|
|
|
|
|
Пояснения: При вычислении выражения V для строки таблицы каждая ссылка на столбец этой таблицы, непосредственно содержащаяся в V, рассматривается как ссылка на значение данного столбца в данной строке. Если первичное выражение есть скалярный подзапрос (подзапрос, результатом которого является таблица, состоящая из одной строки и одного столбца), и результат подзапроса пуст, то результатом первичного выражения является неопределенное значение.
3.2.1. Численные выражения
Численное выражение - это выражение, значение которого относится к числовому типу данных. По сути дела, численные выражения SQL/92 являются не очень большим расширением арифметических выражений SQL/89. Вот формальный синтаксис численного выражения:
::=
|
|
::=
|
|
::=
[ ]
::=
|
Пояснения: Следует обратить внимание на то, что в отличие от SQL/89 в численных выражениях SQL/92 первичная составляющая является либо первичным численным выражением (см. выше), либо вызовом функции с численным значением. Из этого, в частности, следует, что в численные выражения могут входить выражения с переключателем и операторы преобразования типов.
Функция с численным значением определяется следующими синтаксическими правилами: