case oracle sql примеры

В этой статье мы рассмотрим выражение CASE языка Transact-SQL, Вы узнаете, что это за выражение, его синтаксис, а также мы разберем несколько примеров использования выражения CASE.

Содержание

  1. CASE в Transact-SQL
  2. Примеры CASE в Transact-SQL
  3. Исходные данные для примеров
  4. Пример простого выражения CASE в инструкции SELECT
  5. Пример поискового выражения CASE в инструкции SELECT
  6. Пример выражения CASE в инструкции SET
  7. Базы данных
  8. Описание
  9. Синтаксис
  10. Параметры или аргументы
  11. Примечание
  12. Применение
  13. Пример

CASE в Transact-SQL

CASE – это инструкция, которая проверяет список условий и возвращает соответствующий результат. Если говорить в целом о программировании, то CASE – это что-то вроде многократного использования конструкции IF-ELSE, во многих языках есть похожая конструкция SWITCH, так вот CASE, как я уже отметил, делает примерно то же самое.

Выражение CASE можно использовать практически в любой инструкции T-SQL, где есть возможность использовать допустимые выражения, например: SELECT, UPDATE, WHERE, SET и даже в ORDER BY.

CASE имеет два так называемых формата:

  • Простое выражение CASE – это простое сравнение значения (выражения) с набором других значений (выражений);
  • Поисковое выражение CASE – в данном случае CASE содержит набор логических выражений, которые вычисляются, чтобы вернуть результат.

Синтаксис CASE в Transact-SQL

Простое выражение CASE

Поисковое выражение CASE

Описание параметров:

  • input_expression — выражение, которое необходимо проверить в простом формате CASE;
  • WHEN when_expression — выражение, с которым сравнивается input_expression, в случае с простым форматом. Тип данных when_expression должен быть такой же, как и у input_expression, или хотя бы неявно преобразовываться;
  • THEN result_expression — выражение, которое будет возвращено, если текущее условие выполняется;
  • ELSE else_result_expression – дополнительный параметр ELSE, который предназначен для случаев, когда ни одно из перечисленных в CASE условий не выполнилось. Это необязательный параметр. Если ELSE не указано, а условия не выполнились, вернётся NULL;
  • WHEN Boolean_expression — логическое выражение, используемое в поисковом формате CASE, которое служит для вычисления результата. Это своего рода проверочное условие и таких условий может быть несколько.

CASE возвращает результат первого выражения (THEN result_expression), условие которого выполнилось, т.е. WHEN возвращает TRUE. Таким образом, если CASE содержит несколько эквивалентных условий WHEN, которые будут возвращать TRUE, вернется результат (указанный в THEN) первого выражения.

Тип данных возвращаемого результата выражением CASE, будет соответствовать наиболее приоритетному типу данных из набора типов в выражениях result_expressions и else_result_expression.

Примеры CASE в Transact-SQL

Сейчас давайте рассмотрим несколько примеров использования выражения CASE, но сначала разберем исходные данные, которые я буду использовать в примерах, чтобы было более понятно и наглядно.

Исходные данные для примеров

Допустим, что у нас есть таблица с товарами, она имеет следующую структуру и данные.

Примечание! Если Вы начинающий программист и не знаете, что делает вышеуказанная инструкция, то рекомендую Вам почитать мою книгу, посвященную основам языка Transact-SQL – «Путь программиста T-SQL» – это своего рода самоучитель по языку Transact-SQL, в котором я очень подробно рассказываю обо всех конструкциях языка, начиная с простых и заканчивая продвинутыми.

Пример простого выражения CASE в инструкции SELECT

В этом примере мы проверяем значение столбца ProductId, если оно равняется одному из перечисленных значений в выражении WHEN, то будет выводиться соответствующее значение из выражения THEN. Если нам встретится значение, которого мы не указали, CASE вернет пусто, т.е. значение из ELSE.

Пример поискового выражения CASE в инструкции SELECT

Следующий запрос эквивалентен предыдущему, но в нем используется уже поисковый формат CASE.

Как видим, результат точно такой же.

Давайте немного усложним запрос, добавим в него некий анализ цены (Price). Также я здесь покажу, что в случае, если по факту у нас может выполниться несколько условий, результат будет возвращен первого выражения с TRUE (т.е. условие выполнилось), выражения, идущие после, не обрабатываются.

Как видите, условие WHEN Price = 300 AND Product >

Пример выражения CASE в инструкции SET

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

Примечание! Про основы программирования на языке T-SQL в Microsoft SQL Server можете почитать в материале «Основы программирования на T-SQL».

CASE expressions let you use IF . THEN . ELSE logic in SQL statements without having to invoke procedures. The syntax is:

Description of the illustration case_expression.gif

Description of the illustration simple_case_expression.gif

Description of the illustration searched_case_expression.gif

Description of the illustration else_clause.gif

In a simple CASE expression, Oracle Database searches for the first WHEN . THEN pair for which expr is equal to comparison_expr and returns return_expr . If none of the WHEN . THEN pairs meet this condition, and an ELSE clause exists, then Oracle returns else_expr . Otherwise, Oracle returns null. You cannot specify the literal NULL for every return_expr and the else_expr .

In a searched CASE expression, Oracle searches from left to right until it finds an occurrence of condition that is true, and then returns return_expr . If no condition is found to be true, and an ELSE clause exists, Oracle returns else_expr . Otherwise, Oracle returns null.

Oracle Database uses short-circuit evaluation . That is, for a simple CASE expression, the database evaluates each comparison_expr value only before comparing it to expr , rather than evaluating all comparison_expr values before comparing any of them with expr . Consequently, Oracle never evaluates a comparison_expr if a previous comparison_expr is equal to expr . For a searched CASE expression, the database evaluates each condition to determine whether it is true, and never evaluates a condition if the previous condition was true.

For a simple CASE expression, the expr and all comparison_expr values must either have the same datatype ( CHAR , VARCHAR2 , NCHAR , or NVARCHAR2 , NUMBER , BINARY_FLOAT , or BINARY_DOUBLE ) or must all have a numeric datatype. If all expressions have a numeric datatype, then Oracle determines the argument with the highest numeric precedence, implicitly converts the remaining arguments to that datatype, and returns that datatype.

For both simple and searched CASE expressions, all of the return_expr s must either have the same datatype ( CHAR , VARCHAR2 , NCHAR , or NVARCHAR2 , NUMBER , BINARY_FLOAT , or BINARY_DOUBLE ) or must all have a numeric datatype. If all return expressions have a numeric datatype, then Oracle determines the argument with the highest numeric precedence, implicitly converts the remaining arguments to that datatype, and returns that datatype.

The maximum number of arguments in a CASE expression is 255. All expressions count toward this limit, including the initial expression of a simple CASE expression and the optional ELSE expression. Each WHEN . THEN pair counts as two arguments. To avoid exceeding this limit, you can nest CASE expressions so that the return_expr itself is a CASE expression.

Table 2-10, «Implicit Type Conversion Matrix» for more information on implicit conversion

«Numeric Precedence» for information on numeric precedence

COALESCE and NULLIF for alternative forms of CASE logic

Oracle Data Warehousing Guide for examples using various forms of the CASE expression

Базы данных

В этом учебном пособии вы узнаете, как использовать оператор CASE в Oracle/PLSQL c синтаксисом и примерами.

Описание

В Oracle/PLSQL оператор CASE имеет функциональность IF-THEN-ELSE. Начиная с Oracle 9i, вы можете использовать оператор CASE в SQL предложении.

Синтаксис

WHEN condition_1 THEN result_1
WHEN condition_2 THEN result_2

WHEN condition_n THEN result_n

Параметры или аргументы

expression не является обязательным. Это значение, которое вы сравниваете с условиями (то есть: condition_1 , condition_2 … condition_n ).

condition_1 .. condition_n должны быть одного типа. Условия оцениваются по порядку, одно за другим. После того, как условие примет значение TRUE (истина), оператор CASE вернет результат, и не будет оценивать условия дальше.

result_1 .. result_n все должны быть одного типа данных. Это значение возвращается единожды, когда условие примет TRUE (истина).

Примечание

  • Если условие не примет TRUE, то оператор CASE вернет значение предложения ELSE.
  • Если предложение ELSE опущено и условие не примет TRUE, то оператор CASE вернет NULL.
  • Оператор CASE может иметь до 255 сравнений. Каждое предложение WHEN … THEN рассматривает 2 сравнения.

Применение

Оператор CASE можно использовать в следующих версиях Oracle / PLSQL:

  • Oracle 12c, Oracle 11g, Oracle 10g, Oracle 9i

Пример

Вы можете использовать оператор CASE в SQL предложении следующим образом:

Источник: computermaker.info

Понравилась статья? Поделиться с друзьями:
Ок! Компьютер
Добавить комментарий