Здавалка
Главная | Обратная связь

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



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

case_expression ::= case_abbreviation | case_specification case_abbreviation ::= NULLIF (value_expression , value_expression) | COALESCE (value_expression_comma_list)case specification ::= simple_case | searched_case simple_case ::= CASE value_expression simple_when_clause_list [ ELSE value_expression ] END searched_case ::= CASE searched_when_clause_list [ ELSE value_expression ] ENDsimple_when_clause ::= WHEN value_expression THEN value_expressionsearched_when_clause ::= WHEN conditional_expression THEN value_expression

Наиболее общим видом выражения с переключателем является выражение с поисковым переключателем (searched_case). Правила вычисления выражений этого вида состоят в следующем. Вычисляется логическое выражение, указанное в первом разделе WHEN списка (searched_when_clause_list). Если значение этого логического выражения равняется true, то значением всего выражения с поисковым переключателем является значение выражения, указанного в первом разделе WHEN после ключевого слова THEN. Иначе аналогичные действия производятся для второго раздела WHEN и т. д. Если ни для одного раздела WHEN при вычислении логического выражения не было получено значение true, то значением всего выражения с поисковым переключателем является значение выражения, указанного в разделе ELSE. Типы всех выражений, значения которых могут являться результатом выражения с поисковым переключателем, должны быть совместимыми, и типом результата является «наименьший общий» тип набора типов выражений-кандидатов на выработку результата117). Если в выражении отсутствует раздел ELSE, предполагается наличие раздела ELSE NULL.

В выражении с простым переключателем (simple_case) тип данных операнда переключателя (выражения, непосредственно следующего за ключевым словом CASE, назовем его CO – Case Operand) должен быть совместим с типом данных операнда каждого варианта (выражения, непосредственно следующего за ключевым словом WHEN; назовем WO – When Operand). Выражение с простым переключателем

CASE CO WHEN WO1 THEN result1 WHEN WO2 THEN result2 . . . . . . . WHEN WOn THEN resultn ELSE resultEND

117 Для набора типов T1, T2, …, Tn, будем называть тип T, если значения каждого из типов T1, T2, …, Tn неявно приводимы к типу T, и не существует типа T', такого, что значения типов T1, T2, …, Tn неявно приводимы к типу T', и значения типа T' неявно приводимы к типу T.

эквивалентно выражению с поисковым переключателем

CASE WHEN CO = WO1 THEN result1 WHEN CO = WO2 THEN result2 . . . . . . . WHEN CO = WOn THEN resultn ELSE resultEND

Выражение NULLIF (V1, V2) эквивалентно следующему выражению с переключателем:

CASE WHEN V1 = V2 THEN NULL ELSE V1 END.

Выражение COALESCE (V1, V2) эквивалентно следующему выражению с переключателем:

CASE WHEN V1 IS NOT NULL THEN V1 ELSE V2 END.

Выражение COALESCE (V1, V2, . . . Vn) для n 3 эквивалентно следующему выражению с переключателем:

CASE WHEN V1 IS NOT NULL THEN V1 ELSE COALESCE (V2,... n) END.





©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.