Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
При insert и update изменить значение поля остальных записей
|
|||
|---|---|---|---|
|
#18+
Здравствуйте всем! DB2 UDB 8.2 Занимаемся тут разработкой структуры базы приложения. В одной из таблиц есть поле-флаг (smallint), которое может принимать только значения 0,1 (навесил констрайнт). Согласно технологии работы среди записей таблицы только одна может иметь значение 1, остальные должны иметь значение 0. Вопрос, как это сделать на уровне базы? Пытался создать триггер на добавление и изменение, который апдейтит оставшиеся записи. Но DB2 ругается на применение неподдерживаемых SQL-операторов. Можно ли вообще реализовать это на уровне базы? ХП? PS. На уровне приложения я это уже сделал. Но хотелось бы, чтобы база сама это делала. С уважением, Семен Попов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2010, 12:04 |
|
||
|
При insert и update изменить значение поля остальных записей
|
|||
|---|---|---|---|
|
#18+
Кроме того, что у триггера after возможностей поболе, чем триггера before, замечу такую вещь. На самом деле вам эта колонка вообще не нужна. Вы хотите отметить какую-то единичную запись среди множества других? Просто запомните ключ этой записи где-то ещё. Например, в какой-то другой таблице, где ровно одна запись, а вставка и удаление запрещены триггерами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2010, 12:28 |
|
||
|
При insert и update изменить значение поля остальных записей
|
|||
|---|---|---|---|
|
#18+
Сравните, к примеру, каково будет искать ту отмеченную запись - по колонке (индекс по ней будет выглядеть... странным, особенно учитывая, что битмаповых индексов в духе Oracle у DB2 нет), или просто зная её ключ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2010, 12:35 |
|
||
|
При insert и update изменить значение поля остальных записей
|
|||
|---|---|---|---|
|
#18+
и что-то наподобие Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2010, 12:44 |
|
||
|
При insert и update изменить значение поля остальных записей
|
|||
|---|---|---|---|
|
#18+
Victor MetelitsaКроме того, что у триггера after возможностей поболе, чем триггера before, замечу такую вещь. На самом деле вам эта колонка вообще не нужна. Вы хотите отметить какую-то единичную запись среди множества других? Просто запомните ключ этой записи где-то ещё. Например, в какой-то другой таблице, где ровно одна запись, а вставка и удаление запрещены триггерами.Спасибо. Согласен с Вами, что вынести ID отмеченной записи в отдельную таблицу было бы разумнее. Подумаю над такой реализацией. У меня записей в таблице будет немного - это справочник. Поэтому может и триггера было бы достаточно. Дейcтвительно, триггер after съел то, что я хочу (до этого пробовал before). А именно: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2010, 12:53 |
|
||
|
При insert и update изменить значение поля остальных записей
|
|||
|---|---|---|---|
|
#18+
На первый взгляд - ничем. Но интересно будет помедитировать на тему одновременного присвоения двумя юзерами тому полю 1 разным записям. Чисто из познавательных соображений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2010, 16:42 |
|
||
|
При insert и update изменить значение поля остальных записей
|
|||
|---|---|---|---|
|
#18+
Victor MetelitsaНа первый взгляд - ничем. Но интересно будет помедитировать на тему одновременного присвоения двумя юзерами тому полю 1 разным записям. Чисто из познавательных соображений.Спасибо, попробовали. У одного из пользователей произошел откат транзакции. Тогда может в триггере залочить таблицу перед апдейтом, чтобы другой пользователь ждал пока не разлочится? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2010, 10:14 |
|
||
|
|

start [/forum/topic.php?fid=43&msg=36965800&tid=1602493]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 278ms |
| total: | 400ms |

| 0 / 0 |
