
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
20.10.2003, 13:47
|
|||
|---|---|---|---|
|
|||
Проблема с хранимыми процедурами |
|||
|
#18+
Проблема в следующем: 2 клиента. Если на 1 выполняется 2 процедура, а на 2, через некоторое время 1(:ipPR один и тот же) то выдается ошибка. о незавершённости транзакции. Если значение :ipPR разное проблем нет. Текст 1 процедуры DECLARE VARIABLE FAMIL VARCHAR(20); DECLARE VARIABLE NAM VARCHAR(20); DECLARE VARIABLE OTC VARCHAR(20); DECLARE VARIABLE STAT VARCHAR(20); DECLARE VARIABLE OTD VARCHAR(20); begin begin select fam,name,ot,status,otdel from users where pr=:ipPR into :famil,:nam,:otc,:stat,:otd; insert into log (pr,fam,name,ot,status,otdel,sys_date,date_in) values (:ipPR,:famil,:nam,:otc,:stat,:otd,:ipDate,:ipDate); update users set IN_OUT = "1" where PR = :ipPR; end suspend; end Текст 2 процедуры DECLARE VARIABLE FAMIL VARCHAR(20); DECLARE VARIABLE NAM VARCHAR(20); DECLARE VARIABLE OTC VARCHAR(20); DECLARE VARIABLE STAT VARCHAR(20); DECLARE VARIABLE OTD VARCHAR(20); begin begin select fam,name,ot,status,otdel from users where pr=:ipPR into :famil,:nam,:otc,:stat,:otd; insert into log (pr,fam,name,ot,status,otdel,sys_date,date_out) values (:ipPR,:famil,:nam,:otc,:stat,:otd,:ipDate,:ipDate); update users set IN_OUT = "0" where PR = :ipPR; end suspend; end ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
20.10.2003, 14:20
|
|||
|---|---|---|---|
Проблема с хранимыми процедурами |
|||
|
#18+
Ну так видать транзакции у тебя неправильно обрабатываются. Если поцедура 1 не подтверждена, то при выполнении процедуры 2 должен быть dead lock, поскольку оба пишут в одну и ту же запись при одинаковых ipPR. Про транзакции читать на ibase.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
20.10.2003, 14:22
|
|||
|---|---|---|---|
|
|||
Проблема с хранимыми процедурами |
|||
|
#18+
а как правильно? ответ. в клиенте делать бегинтран - коммит. ы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
20.10.2003, 16:46
|
|||
|---|---|---|---|
|
|||
Проблема с хранимыми процедурами |
|||
|
#18+
Используйте компоненты прямого доступа - IB Express, IBX или, еще лучше - FIBPlus. Там хочешь - не хочешь, придется разобраться с транзакциями. В общем, принцип такой - //--- Клиент хочет изменять данные: try Start Transaction ... // Клиент меняет данные ... Commit // Все в порядке, данные изменены, можно позволить другим // клиентам читать мои изменения except // Ошибка RollBack // Все изменения отменяются, другие клиенты // ничего не заметят... end //----------- Для операции чтения обычто используют "длинную" транзакию, которая одна на все время жизни приложения, в ней ничего не изменяют, только читаю данные из базы. Для операции изменения (быстро-быстро) создают пишущую транзакцию, как описано выше, которую после операции изменения завершают (или Commit - подтверждение, или RollBack - откат). Возможны варианты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=40&mobile=1&tid=1579781]: |
0ms |
get settings: |
7ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
146ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 221ms |
| total: | 457ms |

| 0 / 0 |
