Выбрать главу

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.