|
Вложенные транзакции
|
|||
---|---|---|---|
#18+
НеофитSQL Ещё inner() может ... сделать commit. . ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2020, 18:01 |
|
Вложенные транзакции
|
|||
---|---|---|---|
#18+
НеофитSQL SQL+ это хорошо понимает, поэтому там сделано как у меня - каждая DML команда изменения данных является "вложенной" транзакцией, чтоб результаты предыдущих команд не пропали. Это не SQL*Plus. Необработанное исключение в анонимном PL/SQL блоке вызывает откат изменений в нём. Код: plsql 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.
N комментарий11101211023120141202513011302: второй insert после commit отменён61401 эти insert не коммитили71402 но исключение на следующей итерации их не не отменило 150x: оба insert отменены. insert 140x в предыдущей итерации сохранился82101 далее исключения обрабатывались внутри анонимного PL/SQL блока92102 все insert сохранились102201112202122301132302142401152402162501172502 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2020, 01:42 |
|
Вложенные транзакции
|
|||
---|---|---|---|
#18+
andreymx НеофитSQL Ещё inner() может ... сделать commit. . За Код: plsql 1.
кого убивать? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2020, 01:47 |
|
Вложенные транзакции
|
|||
---|---|---|---|
#18+
mcureenab, Вы возможно о другом. Я про 22247130 В sql+, строчки Код: plsql 1. 2. 3.
принадлежат одной транзакции, или двум разным? По моему пониманию, одной. Второй вопрос: почему exception во второй не откатывает всю транзакцию, удаляя (5)? Думаю, sql+ делает savepoint перед исполнением каждой новой команды. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2020, 02:55 |
|
Вложенные транзакции
|
|||
---|---|---|---|
#18+
НеофитSQL Думаю, sql+ делает savepoint перед исполнением каждой новой команды. Это далеко не первый случай, когда Вы подменяете изучение документации измышлизмами. https://docs.oracle.com/cd/B19306_01/server.102/b14220/transact.htm#:~:text=Statement-Level Rollback,is a statement-level rollback. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2020, 03:33 |
|
Вложенные транзакции
|
|||
---|---|---|---|
#18+
andrey_anonymous, Statement-level rollback это превосходная штука для командной строки, но учтите следующее: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
Исходя из моего эксперимента, весь анонимный блок с многими insert внутри - это один statement. Кстати, вы заметили неточность в определении начала транзакции в доке по ссылке? У оракла есть более точное определение в других местах, здесь они решили упростить. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2020, 06:24 |
|
Вложенные транзакции
|
|||
---|---|---|---|
#18+
НеофитSQL Думаю, sql+ делает savepoint перед исполнением каждой новой команды. SQL*Plus этого не делает. Это функция СУБД. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2020, 09:35 |
|
Вложенные транзакции
|
|||
---|---|---|---|
#18+
НеофитSQL mcureenab, Код: plsql 1. 2. 3.
принадлежат одной транзакции, или двум разным? По моему пониманию, одной. Второй вопрос: почему exception во второй не откатывает всю транзакцию, удаляя (5)? Вот этими вопросами рулит SQL*Plus. 1. Включи WHENEVER SQLERROR CONTINUE ROLLBACK, и исключение во втором insert откатит изменения первого. 2. Включи SET AUTOCOMMIT, и insert'ы окажутся в разных транзакциях. А вот так чтобы не откатывать анонимный PL/SQL блок, такого нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2020, 09:42 |
|
Вложенные транзакции
|
|||
---|---|---|---|
#18+
НеофитSQL Исходя из моего эксперимента, весь анонимный блок с многими insert внутри - это один statement. https://docs.oracle.com/cd/E18283_01/appdev.112/e17126/overview.htm An anonymous block is a SQL statement. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2020, 10:01 |
|
Вложенные транзакции
|
|||
---|---|---|---|
#18+
НеофитSQL Теперь это потребовалось, потому что она стала участвовать в бОльшей транзакции неопределенного размера. rollback to не отпускает ждущие сессии так что желательно завершить транзакцию как можно побыстрее ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2020, 13:01 |
|
Вложенные транзакции
|
|||
---|---|---|---|
#18+
Stax НеофитSQL Теперь это потребовалось, потому что она стала участвовать в бОльшей транзакции неопределенного размера. rollback to не отпускает ждущие сессии так что желательно завершить транзакцию как можно побыстрее ..... stax Возражений нет, вот только моя функция промежуточного слоя не управляет когда транзакция закончится. Rollback to это максимум что мне удастся сделать. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2020, 16:44 |
|
Вложенные транзакции
|
|||
---|---|---|---|
#18+
mcureenab НеофитSQL Думаю, sql+ делает savepoint перед исполнением каждой новой команды. SQL*Plus этого не делает. Это функция СУБД. А можно как-то эту функцию СУБД натравить на pl/sql код,и объявить определенную процедуру отдельным "statement", чтобы statement-level rollback относился к ней? Я видел чьи-то надежды на PRAGMA NESTED_TRANSACTION в оракл коммюнити, но пока такого удобного механизма вроде не случилось. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2020, 16:54 |
|
|
start [/forum/topic.php?fid=52&gotonew=1&tid=1880609]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
136ms |
get topic data: |
12ms |
get first new msg: |
6ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
others: | 293ms |
total: | 527ms |
0 / 0 |