Введение в стандарты языка баз данных SQL

       

Выражения с переключателем


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

<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)).


  • Содержание раздела