|
|
|
ASE 12.5 как запретить перекрывающиеся диапазоны
|
|||
|---|---|---|---|
|
#18+
А вот еще задачка для гуру в ASE. Есть таблица хранящая временные периоды. Код: plaintext 1. 2. 3. 4. 5. На WatcomSQL в ASA я бы это сделал так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. --- http://www.rusug.ru] Портал русскоязычной группы пользователей Sybase ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2007, 18:14 |
|
||
|
ASE 12.5 как запретить перекрывающиеся диапазоны
|
|||
|---|---|---|---|
|
#18+
White Owl пишет: > Надо запретить появление записей в которых периоды пересекаются. > На WatcomSQL в ASA я бы это сделал так: > > create trigger forbid_intersection > before insert,update > on t > referencing new as new_row > for each row > begin > if exists (select 1 from t where event_type=new_row.event_type and > ((event_start>new_row.event_start and event_end>new_row.event_end) or > (event_start<new_row.event_start and event_end<new_row.event_end))) > then > raiseerror *30001* 'Event periods can not intersect'; > end if; > end; > > Спрашивается, как сделать подобный триггер для ASE 12.5? Ну в общем-то такой же триггер можно написать, но будет он AFTER и FOR ALL ROWS. Т.е. тебе придется обрабатывать скопом все вставленные (измененные) записи и либо откатывать транзакцию целиком всю. либо отменять изменения (вставки и модификации) только неправильных строк с выдачей сообщения (сообщение в ASE не является обязательным признаком наличия ошибки и отката транзакции). Отменять - вставки путем встречного удаления записей, изменения - путем встречных изменений. Данные в INSERTED /DELETED все есть для этого. Триггер такой можно конечно приблизительно написать, если тряхнуть стариной. Ну ежели совсем не сможешь стартануть. Еще совет - наверное лучше писать два триггера отдельно на UPDATE и INSERT. Логика будет проще, а реюзать один запрос на получение перес. диапазонов большого смысла нет. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2007, 11:30 |
|
||
|
|

start [/forum/topic.php?fid=55&fpage=58&tid=2011836]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
302ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
42ms |
get tp. blocked users: |
2ms |
| others: | 237ms |
| total: | 630ms |

| 0 / 0 |
