|
|
|
Транзакции в процедурах, ASA 6
|
|||
|---|---|---|---|
|
#18+
Добрый день всем. Сервер ASA 6.04, работает в режиме неявных транзакций. Такая ситуация: есть две хранимые процедуры такого вида: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Если выполнение usr.spMakeBills(…) прервать, то все сделанные изменения будут отменены. Хотелось бы, однако, при прерывании выполнения процедуры, чтобы уже посчитанные счета сохранялись. Попробовала код процедуры usr.spMakeBillForCustomer(…) обрамить в блок BEGIN TRAN … COMMIT TRAN : Код: plaintext 1. 2. 3. 4. 5. Однако уже при компиляции процедуры выдается сообщение «синтаксическая ошибка возле TRANSACTION» Вопрос: каким образом можно добиться того, чтобы результаты выполнения вложенных процедур не откатывались при прерывании внешней процедуры? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2004, 15:29 |
|
||
|
Транзакции в процедурах, ASA 6
|
|||
|---|---|---|---|
|
#18+
а просто Commit в конце процедуры spMakeBillForCustomer ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2004, 15:47 |
|
||
|
Транзакции в процедурах, ASA 6
|
|||
|---|---|---|---|
|
#18+
честно говоря, экспериментальным путем пока не пробовала. Но, согласно хелпу, просто Commit заканчивает одну логическую единицу (транзакцию), и делает все изменения, которые во время этой транзакции произошли в БД, постоянными. так вот, что в этом случае понимается под транзакцией? Сервер работает в режиме неявных транзакций, т.е. каждый insert, update, delete - одна транзакция. в случае BEGIN TRAN … COMMIT TRAN должен полностью выполниться или не выполниться целый блок. А что закоммитится в случае просто одного Commit в конце процедуры? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2004, 15:55 |
|
||
|
Транзакции в процедурах, ASA 6
|
|||
|---|---|---|---|
|
#18+
авторСервер работает в режиме неявных транзакций, т.е. каждый insert, update, delete - одна транзакция. в случае BEGIN TRAN … COMMIT TRAN должен полностью выполниться или не выполниться целый блок. А что закоммитится в случае просто одного Commit в конце процедуры? Ваше утверждение будет истинным только при условии, что включен режим AutoCommit, т.е. опция БД CHAINED установленна в значение OFF. По умолчанию эта опция выставленна в ON, т.е. для старта транзакции не нужен BEGIN TRAN, достаточно выполнить insert, update или delete, а конец транзакции определяет программист явным COMMIT или ROLLBACK. авторА что закоммитится в случае просто одного Commit в конце процедуры? Так что при включенной опции (что скорее всего у Вас и есть) в начале процедуры у вас будет неявно стартовать транзакция, но явно с Вашей помощью при вызове COMMIT завершаться, что собственно говоря Вам и требуется. На текущий же момент все Ваши изменения получаются проходят в пределах одной транзакции, т.е. если Вы в ISQL напишите такой код: Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2004, 16:20 |
|
||
|
|

start [/forum/topic.php?fid=55&msg=32547301&tid=2014451]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
38ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 17ms |
| total: | 149ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...