Читайте также:
|
|
При обновлении строк таблицы вам иногда придется принимать реше_ ния относительно того, какие значения должны быть заданы в опреде_ ленных столбцах. Например, после вставки новой транзакции долж_ ны измениться столбцы avail_balance, pending_balance и last_activi_ ty_date таблицы account. С обновлением двух последних столбцов про_ блем нет, но чтобы правильно изменить столбец avail_balance, надо проверить столбец funds_avail_date таблицы transaction и выяснить, сразу ли доступны фонды транзакции. Допустим, только что вставле_ на транзакция с ID 999, тогда изменить три столбца таблицы account можно с помощью следующего выражения update:
1 UPDATE account
2 SET last_activity_date = CURRENT_TIMESTAMP(), 3 pending_balance = pending_balance +
4 (SELECT t.amount *
5 CASE t.txn_type_cd WHEN 'DBT' THEN _1 ELSE 1 END
6 FROM transaction t
7 WHERE t.txn_id = 999),
8 avail_balance = avail_balance +
9 (SELECT
10 CASE
11 WHEN t.funds_avail_date > CURRENT_TIMESTAMP() THEN 0
12 ELSE t.amount *
13 CASE t.txn_type_cd WHEN 'DBT' THEN _1 ELSE 1 END
14 END
15 FROM transaction t
16 WHERE t.txn_id = 999)
228 Глава 11. Условная логика
17 WHERE account.account_id =
18 (SELECT t.account_id
19 FROM transaction t
20 WHERE t.txn_id = 999);
Здесь всего три выражения case: два из них (строки 5 и 13) служат для изменения знака суммы транзакции для дебетовых транзакций, а третье выражение case (строка 10) предназначено для проверки даты доступности фондов. Если эта дата еще не наступила, к доступному ос_ татку добавляется нуль; в противном случае добавляется сумма тран_ закции.
Дата добавления: 2015-08-17; просмотров: 32 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Ошибки деления на нуль | | | Обработка значений Null |