Программирование >>  Создание клиентов mysql 

1 ... 44 45 46 [ 47 ] 48 49 50 ... 201



Управляющие функции

CASE

Синтаксис конструкции CASE таков:

CASE проверяемое выражение

WHEN значение! THEN возвращаемое значение1 [WHEN значение! THEN возвращаемое значение2]

[ELSE значен11е по умолчанию]

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

В листинге 12.7 демонстрируется применение конструкции CASE по отношению к таблице, состоящей из пяти строк. Когда идентификатор равен 1 или 2, возвращается строка One или Two, иначе отображается строка Other Value.

mysql> SELECT ID, CASE ID

-> WHEN 1 THEN One

-> WHEN 2 THEN Two

-> ELSE Other Value

-> END AS CASE Result

-> FROM item;


5 rows in se ,00 sec)

Тип возвращаемого значения соответствует типу аргумента самого первого предложения THEN.

CASE WHEN

Синтаксис альтернативного варианта конструкции CASE таков:

CASE

WHE вие! THEN возвращаемое значение1

[WHEN условие2 THEN возвращаемое значение2]

[ELSE значение по умолчанию]



Здесь проверяется каждое условие по отдельности. Возвращается то значение, для которого условие является истинным. Возвращаемое значение может быть произвольным выражением, в том числе результатом вызова функции.

mysql> SELECT ID, CASE

-> WHEN ID < 3 THEN POWER {ID, 2)

-> WHEN ID = 4 THEN ID

-> ELSE Name

-> END AS CASE Result

-> FROM item;


5 rows in set (0.00 sec)

Поскольку результат конструкции CASE может менять свой тип в зависимости от условия, столбцу присваивается тип аргумента самого первого предложения THEN.

ОЕТ иОСК(имя, тайм-аут)

Функция GET LOCK() запрашивает именованную блокировку на указанное число секунд. Функция не завершится до тех пор, пока не истечет период тайм-аута или блокировка не будет получена.

Одному сеансу может принадлежать только одна блокировка. Вызов функции GET LOCK() приводит к снятию всех удерживаемых блокировок, но лучше все же снимать их явно с помощью функцииRELEASE LOCK(). Блокировка снимается также в случае завершения сеанса.

Наличие блокировки не дает ее владельцу никаких преимуществ и никак не ограничивает работу других сеансов. Тем не менее при согласованное нении именованных блокировок несколькими программами появляется возможность реализовать блокирование произвольного уровня детализации. Пример использования функцииGET LOCK()для блокирования записей приводился в главе 9, Транзакции и параллельные вычисления . Похожий пример дан в листинге 12.9.

mysql> SELECT GET LOCK(item.ID=3, 60); LOCK I




Управляющие функции

1 row in set (0.00 sec)

mYsql> UPDATE item SET Price=3.15 WHERE ID=3; Query OK, 1 row affected (0.00 sec) Rows matched 1 Changed 1 Warnings 0

mysql> SELECT RELEASE LOCK(item.ID=3);

LOCK I


овие, значение истина, значение ложь)

Функции 0 возвращает разные значения в зависимости от того, истинным или ложным является проверяемое выражение. Результат проверки приводится к целому типу.

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

В листинге 12.10 с помощью функции ряется, является ли текущий день будним или выходным.


lFNULL(пpoвepяeмoeJЗнaчeниe, возвращаемое значение)

Функции WLL {) возвращает проверяемое значение, если оно не равно NULL. В противном случае возвращается второй аргумент. В листинге 12.11 показано, как с помощью этой функции заменить значения NULL описательной фразой.



1 ... 44 45 46 [ 47 ] 48 49 50 ... 201

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика