|
SAVEPOINT в DB2 UDB v.7.2 (Windows 2000)
|
|||
---|---|---|---|
#18+
Пишу следующий скрипт (запускаю в Quest Central или в родном CLP, но знаком для окончания статмента стоит точка с запятой): savepoint ttt ON ROLLBACK RETAIN CURSORS; insert into dt.test1 values (10); insert into dt.test1 values (10); insert into dt.test1 values (10); insert into dt.test1 values (10); insert into dt.test1 values (10); insert into dt.test1 values (10); rollback to savepoint ttt; select * from dt.test1; В результате хотелось бы получить неизмененную таблицу dt.test1. Пример составил вроде бы по доке, поэтому если будете к ней отсылать, то уточните, пожалуйста, на что именно нужно обратить внимание. Вообще же проблема следующая: в одной функции (функция1) на Си делается вставка некоторых данных в одну таблицу (таблица1). в другой (функция2) - вызывается "функция1" и в другую таблицу (таблица2) вставляются некоторые, связанные с данными вставленными функцией "функция1" в таблицу "таблица1". Суть в том, что если где-то происходит ошибка, то необходимо откатить изменения как таблицы 2, так и таблицы 1. В MS SQL подобное решалось открытием именованной транзакции. Но попытки найти как похожее делать на DB2 - наткнулся, что DB2 не поддерживает вложенных транзакций (это правда?) В общем - как можно решить проблему-то? Причем интересует решение как для Windows, так и для OS/390. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2004, 13:29 |
|
SAVEPOINT в DB2 UDB v.7.2 (Windows 2000)
|
|||
---|---|---|---|
#18+
Road RunnerВообще же проблема следующая: в одной функции (функция1) на Си делается вставка некоторых данных в одну таблицу (таблица1). в другой (функция2) - вызывается "функция1" и в другую таблицу (таблица2) вставляются некоторые, связанные с данными вставленными функцией "функция1" в таблицу "таблица1". Суть в том, что если где-то происходит ошибка, то необходимо откатить изменения как таблицы 2, так и таблицы 1. а где здесть проблема??? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2004, 13:35 |
|
SAVEPOINT в DB2 UDB v.7.2 (Windows 2000)
|
|||
---|---|---|---|
#18+
не пойму, а при чем тут вложенные транзакции? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2004, 13:41 |
|
SAVEPOINT в DB2 UDB v.7.2 (Windows 2000)
|
|||
---|---|---|---|
#18+
Я наверно криво объяснил, сорри. Попробую еще раз - необходимо начать транзакцию, потом вызывать разные процедуры, стэйтменты, потом ее, по определенным условиям, либо откатить, либо закоммитить. Проблема в том, что у меня этого не получается (см. пример в самом первом сообщении). Про вложенные транзакции я спросил и просто так и потому что в MSSQL любой стайтмент выполняется в своей транзакции и если вручную открыть транзакцию, то остальные будут для нее вложенными (если, например, вызываемые процедуры тоже будут внутри себя открывать транзакции)... Вот... но вопрос про вложенные транзакции можно считать читым любопытством, что бы он не отвлекал. Главное: как можно добиться начала транзакции вручную и подтверждения\отката транзакции тоже вручную. Или как можно добиться такого поведения? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2004, 15:12 |
|
SAVEPOINT в DB2 UDB v.7.2 (Windows 2000)
|
|||
---|---|---|---|
#18+
Вообще, вот этот скрипт должен работать: savepoint ttt ON ROLLBACK RETAIN CURSORS; insert into dt.test1 values (10); insert into dt.test1 values (10); insert into dt.test1 values (10); insert into dt.test1 values (10); insert into dt.test1 values (10); insert into dt.test1 values (10); rollback to savepoint ttt; select * from dt.test1; Я от него хотел, что бы он откатил состояние базы до insert into dt.test1 values (10);. Однако селект показывает, что вставка происходит и не откатывается. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2004, 15:16 |
|
SAVEPOINT в DB2 UDB v.7.2 (Windows 2000)
|
|||
---|---|---|---|
#18+
бррр..... Road RunnerВообще, вот этот скрипт должен работать: savepoint ttt ON ROLLBACK RETAIN CURSORS; insert into dt.test1 values (10); insert into dt.test1 values (10); insert into dt.test1 values (10); insert into dt.test1 values (10); insert into dt.test1 values (10); insert into dt.test1 values (10); rollback to savepoint ttt; select * from dt.test1; Я от него хотел, что бы он откатил состояние базы до insert into dt.test1 values (10);. Однако селект показывает, что вставка происходит и не откатывается. автокоммит нужно убрать. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2004, 15:25 |
|
SAVEPOINT в DB2 UDB v.7.2 (Windows 2000)
|
|||
---|---|---|---|
#18+
NewYearбррр..... автокоммит нужно убрать. аха.. именно брррр... автокоммит убирается: db2 -c- ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2004, 16:05 |
|
SAVEPOINT в DB2 UDB v.7.2 (Windows 2000)
|
|||
---|---|---|---|
#18+
Как можно выключить автокоммит из хранимой процедуры на С с embedded SQL? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2004, 16:28 |
|
SAVEPOINT в DB2 UDB v.7.2 (Windows 2000)
|
|||
---|---|---|---|
#18+
Road RunnerКак можно выключить автокоммит из хранимой процедуры на С с embedded SQL? t.sql: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44.
d:\sqllib\bin\db2clpex.exe db2 -z t.log -td@ -v -f t.sql t.log: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68.
Ну и в чем проблема? Ошибка явно в кривых руках.... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2004, 17:12 |
|
|
start [/forum/topic.php?fid=43&fpage=151&tid=1606096]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 141ms |
0 / 0 |