Выражения с переключателем
Выражения с переключателем в некотором смысле ортогональны рассмотренным выше видам выражений, поскольку разные выражения с переключателем могут вырабатывать значения разных типов. Поскольку мы еще вообще не рассматривали этот вид выражений, обсудим их более подробно. Как обычно, начнем с синтаксиса:
<case expression> ::= <case abbreviation> |<case specification> <case abbreviation> ::= NULLIF <left paren> <value expression> <comma> <value expression> <right paren> |COALESCE <left paren> <value expression> |<comma> <value expression> }... <right paren> <case specification> ::= <simple case> <searched case> <simple case> ::= CASE <case operand> imple when clause>... <else clause> ] END <searched case> ::= CASE earched when clause>... <else clause> ] END <simple when clause> ::= WHEN <when operand> THEN <result> <searched when clause> ::= WHEN <search condition> THEN <result> <else clause> ::= ELSE <result> <case operand> ::= <value expression> <when operand> ::= <value expression> <result> ::= <result expression> NULL <result expression> ::= <value expression>
Пояснения:
NULLIF (V1, V2) эквивалентно следующей спецификации выражения с переключателем: CASEWHENV1=V2 THENNULLELSEV1 END. COALESCE (V1, V2) эквивалентно следующему: CASEWHENV1 ISNOTNULLTHENV1 ELSEV2 END. COALESCE (V1, V2, . . . ,n) для n >= 3 эквивалентно CASEWHENV1 ISNOTNULLTHENV1 ELSECOALESCE (V2, . . . ,n) END. Если используется простая спецификация выражения (simplecase), то тип данных операнда переключателя (CO - CaseOperand) должен быть совместим с типов данных операнда каждого варианта (WO - WhenOperand); спецификация эквивалентна спецификации поискового переключателя (searchedcase), в котором каждое условие поиска имеет вид "CO=WO". По крайней мере в одном из вариантов должно быть специфицировано результирующее выражение. Если отсутствует раздел ELSE, то по умолчанию полагается ELSENULL. Тип данных результата определяется как минимальный накрывающий тип для всех возможных результатов. Например, если все результирующие значения имеют тип данных строк переменной длины с максимальными длинами m1, m2, ..., mn, то типом данных результата будет тип данных строк переменной длины с максимальной длиной, равной max (m1, m2, ..., mn)).
Содержание раздела