4 N Product i s not a v a ila b le
5 Y Product i s a v a ila b le
Можно передать в функцию DEC0DEO несколько пар параметров стро-
ка_поиска и результат, как показано в следующем примере, который возвращает
столбец p rodu ct_type_id в качестве имени типа товара:
□ SELECT product_id, product_type_id,
DEC0DE(p roduct_type_id,
1, ‘Book’,
2, ‘Video’,
3, ‘DVD’,
4, ‘CD’,
‘Magazine’)
FROM products;
ID PRODUCT_TYPE_ID DEC0DE(P
1 1 Book
2 1 Book
3 2 Video
4 2 Video
5 2 Video
6 2 Video
7 3 DVD
8 3 DVD
9 4 CD
10 4 CD
11 4 CD
12 Magazine
Расширенные запросы 199
Следует отметить, что если:
■ product_type_id равно 1, возвращается значение Book;
■ prodyct_type_id равно 2, возвращается значение Video;
■ product_type_id равно 3, возвращается значение DVD;
■ product_type_id равно 4, возвращается значение CD;
■ product_type_id равно любому другому значению, возвращается значение
Magazine.
Использование выражения CASE
Выражение CASE используется для выполнения логических действий если-
то-иначе (if-then-else) непосредственно в SQL и поддерживается, начиная
с версии базы данных Oracle 9i и выше. Выражение CASE работает аналогично
функции DEC0DE(), но вам следует использовать CASE, поскольку оно
ANSI-совместимо и составляет часть стандарта SQL/92. Помимо прочего,
выражения CASE легче читаются.
Есть два типа выражений CASE:
■ простые выражения CASE, в которых для определения возвращаемого
значения используются выражения;
■ выражения CASE с поиском, в которых для определения возвращаемого
значения используются условия.
Использование простых выражений CASE
В простых выражениях CASE для определения возвращаемого значения используются
выражения. Синтаксис простых CASE-выражений имеет следующий
вид:
□ CASE выражение_поиска
WHEN выражение1 THEN результат1
WHEN выражение2 THEN результат2
WHEN выражениеИ THEN результатИ
ELSE результат_по_умолчанию
END
где
■ выражение_поиска - это вычисляемое выражение;
■ выражение 1, выражение2,..., выражением - это выражения, вычисляемые
для сравнения их с параметром выражение_поиска;
■ результат1, результат2,..., результаты - это возвращаемые значения (по
одному для каждого из возможных выражений). Если с параметром
строка_поиска совпадает выражение1, возвращается результат1 и т. д.;
■ результат_по_умолчанию - это результат, который возвращается, если
параметр строка_поиска не совпадает ни с одним из выражений.
Приведенный ниже пример иллюстрирует использование простого
CASE-выражения, которое возвращает типы товаров в качестве имён:
200 Глава 7
□ SELECT product_id, product_type_id,
CASE product_type_id
WHEN 1 THEN ‘Book’
WHEN 2 THEN ‘Video’
WHEN 3 THEN ‘DVD’
WHEN 4 THEN 'CD'
ELSE ‘Magazine’
END
FROM products;
.ID PRODUCT_TYPE_ID CASEPROD
1 1 Book
2 1 Book
3 2 Video
4 2 Video
5 2 Video
6 2 Video
7 3 DVD
8 3 DVD
9 - * 4 CD
10 4 CD
11 4 CD
12 Magazine
Использование CASE-выражений с поиском
CASE-выражения с поиском используют условия для определения возвращаемого
значения и имеют следующий синтаксис:
□ CASE
WHEN условие1 THEN результат1
WHEN условие2 THEN результат2
WHEN условней THEN результатИ
ELSE результат_по_умолчанию
END
где
■ условие1, условие2, условие-N являются вычисляемыми выражениями;
■ результат1, результат2, результатК1 являются возвращаемыми результатами
(по одному на каждое возможное условие). Если верно условие!,
возвращается результат! и т. д.;
■ результат_по_умолчанию - это результат, возвращаемый в том случае,
если не обнаружено ни одного истинного (true) выражения.
Следующий пример иллюстрирует применение CASE-выражений с поиском:
□ SELECT product_id, product_type_id,
CASE
WHEN product_type_id = 1 THEN ‘Book’
Расширенные запросы 201
WHEN product_type_id
WHEN product_type_id
WHEN product_type_id
ELSE ‘Magazine’
END
FROM products;
2 THEN
3 THEN
4 THEN
‘Video’
‘DVD’
‘CD’
PRODUCT ID PRODUCT_TYPE_ID CASEPROD
1 1 Book
2 1 Book
3 2 Video
4 2 Video
5 2 Video
6 2 Video
7 3 DVD
8 3 DVD
9 4 CD
10 4 CD
11 4 CD
12 Magazine
В CASE-выражениях с поиском можно использовать операторы:
SELECT product_id, price,
CASE
WHEN price > 15 THEN ‘Expensive’
ELSE ’Cheap’
END
FROM products;
О 1—1
PRICE CASEWHENP
1 19.95 Expensive
2 30 Expensive
3 25.99 Expensive
4 13.95 Cheap
5 49.99 Expensive
6 14.95 Cheap
7 13.49 Cheap
8 12.99 Cheap
9 10.99 Cheap
10 15.99 Expensive
11 14.99 Cheap
12 13.49 Cheap
Далее в этой главе, а также в главе 16, будут приведены с более сложные
примеры выражений CASE.