|
Программирование >> Создание клиентов mysql
Управляющие функции 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 описательной фразой.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |