|
|
|
Функция length
|
|||
|---|---|---|---|
|
#18+
stax.., and здесь, неожиданно, следует читать, как союз определяющий последовательность действий. Сначала происходит откат, потом выброс информации о том, что программист совершил ошибку. Т.е. к моменту выброса такой ошибки, транзакции, подвергнутой rollback, уже нет. нельзя уже оказаться в ее контексте и, тем более, вернуться в него. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2016, 16:44 |
|
||
|
Функция length
|
|||
|---|---|---|---|
|
#18+
Elicstax..откаталось и что, где сдесь что вернулись в контекст мастер транзакции?А куда ещё? как куда остатся в автономке, в ексепшене может быть любой код, ето часть процедуры с autonomous_transaction напр exception when ex6519 then write_log(); commit; ... rollback в теле процедуры не вываливает ж в мастер транзакцию сделали implicitly rolled back , но зачем закрывать автономку, причем implicitly rolled back делать если нет обработчика почему для других исключений автономка не заканчивается? имхо баг/фича ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2016, 17:04 |
|
||
|
Функция length
|
|||
|---|---|---|---|
|
#18+
Сергей АрсеньевВообще блок exception по сути своей переходной. Из процедуры уже вышли, а к вызывающему еще не вернулись. что значит из "процедуры уже вышли" exception ето часть процедуры, и там может быть нехилый код ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2016, 17:08 |
|
||
|
Функция length
|
|||
|---|---|---|---|
|
#18+
boobystax.., and здесь, неожиданно, следует читать, как союз определяющий последовательность действий. Сначала происходит откат, потом выброс информации о том, что программист совершил ошибку. Т.е. к моменту выброса такой ошибки, транзакции, подвергнутой rollback, уже нет. нельзя уже оказаться в ее контексте и, тем более, вернуться в него. в ексепшене можно начать новую транзакцию изолированную от мастер explicitly rolled back откатывает текущие изменения но не вываливает ж из автономки Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. имхо бага/фича ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2016, 17:17 |
|
||
|
Функция length
|
|||
|---|---|---|---|
|
#18+
stax.., почему для других исключений автономка не заканчивается? Потому что другие исключения гарантированно происходят до Return/End procedure_at А про это исключение ты должен думать так: Не веря в программиста, зная, что тот всегда пишет то, чего сам не понимает, компилятор , в момент компиляции такой процедуры принудительно вставляет перед каждым return/End procedure вызов метода, производящего принудительные действия по откату с уведомлением в виде ошибки, если к этому моменту автономная транзакция еще не завершена. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2016, 17:19 |
|
||
|
Функция length
|
|||
|---|---|---|---|
|
#18+
boobystax.., почему для других исключений автономка не заканчивается? Потому что другие исключения гарантированно происходят до Return/End procedure_at А про это исключение ты должен думать так: Не веря в программиста, зная, что тот всегда пишет то, чего сам не понимает, компилятор , в момент компиляции такой процедуры принудительно вставляет перед каждым return/End procedure вызов метода, производящего принудительные действия по откату с уведомлением в виде ошибки, если к этому моменту автономная транзакция еще не завершена. причем тут компилятор если в коде есть обработчик исключения Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2016, 17:43 |
|
||
|
Функция length
|
|||
|---|---|---|---|
|
#18+
stax.., Ны хочешь rollback to savepoint, но там может быть только rollback, а он завершает текущую транзакцию. На открыть новую, не связанную с мастер запрета нет. И сделать ты это скорее обязан (собственными руками), раз уж ты решил, что тебе в этом месте необходимо явно перехватывать ошибку из категории "ошибка программиста". каким нибудь Insert into your_super_log ты вполне достигнешь этой цели, но если эта, вновь открытая транзакция останется незавершенной при выходе из процедуры по нговому пути следования, то снова возникнет та же ошибка, которая уже не будет возвращать тебя в исходную точку твоего перехвата. Компилятор здесь при том, что он знает синтакис, используемый в твоем исходном коде, умеет как забраковать его, объявив негодным к компиляции, так и преобразовать к виду, годному для исполнения. В этом месте все тапки его. А в данном случае, если работу по управлению подтранзакией не сделает компилятор, путем внесения в твой код вызовов, подразумеваемых наличием тобой написанной прагмы, то и сделать это будет некому, с учетом всех ожидаемых для данного варианта использования кода соглашений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2016, 23:45 |
|
||
|
Функция length
|
|||
|---|---|---|---|
|
#18+
booby, сорри НТы хочешь ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2016, 23:47 |
|
||
|
Функция length
|
|||
|---|---|---|---|
|
#18+
Сергей АрсеньевВот где написано, что в моем варианте перехватит блок b.А какой еще? Именно в нем последний выполняемый оператор и именно из него происходит выход из процедуры (с незакрытой транзакцией, что и вызывает ORA-6519) Хотя, конечно, выглядит это (да и наверняка, является) как баг. Обработка ошибки, на мой взгляд, должна проводиться или за пределами автономной транзакции (конечно, концептуально это не очень красиво) или в новой автономной транзакции (на которую уже не генерить ошибку, чтоб не допустить рекурсии, что наверняка сложнее). Т.е. либо крестик снимите, либо трусы оденьте. А то, получается, из автономной транзакции, по определению являющейся отдельной от родительской, я тем не менее могу откатить или подтвердить родительскую транзакцию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2016, 03:02 |
|
||
|
Функция length
|
|||
|---|---|---|---|
|
#18+
Речь, естественно, про обработку именно 6519 А то, что оно все-таки пытается после обработчика пойти выполнять PL/SQL дальше (до первого обращения к SQL или хрен знает какая там логика?) это вообще ни в какие ворота Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. PS. я пытался обратить на это внимание еще в 19953712 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2016, 03:23 |
|
||
|
Функция length
|
|||
|---|---|---|---|
|
#18+
Вот так даже интересней Код: 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. 26. 27. 28. 29. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2016, 03:34 |
|
||
|
Функция length
|
|||
|---|---|---|---|
|
#18+
Вячеслав ЛюбомудровРечь, естественно, про обработку именно 6519 А то, что оно все-таки пытается после обработчика пойти выполнять PL/SQL дальше ( до первого обращения к 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. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2016, 09:03 |
|
||
|
Функция length
|
|||
|---|---|---|---|
|
#18+
Вячеслав ЛюбомудровНет там никакой логикину от чего же никакой. return возвращает контекст родительской транзакции независимо от реального выхода. По сути баг. И вряд ли оракл его исправит, останется сакральными знаниями на металинке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2016, 09:38 |
|
||
|
Функция length
|
|||
|---|---|---|---|
|
#18+
Добавил к примеру Славы вывод транзакции Код: 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. 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. 69. 70. 71. 72. 73. 74. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2016, 13:03 |
|
||
|
Функция length
|
|||
|---|---|---|---|
|
#18+
stax..explicitly rolled back откатывает текущие изменения но не вываливает ж из автономки Увы - нет Код: 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. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. sqlplusm->4.30.614216 a->9.7.634789 a<-6519:4.30.614216 a! m!8.17.678840 -------------false--------- a->7.12.604347 a<-6519:8.17.678840 a!8.17.678840 m!8.17.678840 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2016, 15:53 |
|
||
|
Функция length
|
|||
|---|---|---|---|
|
#18+
Вячеслав ЛюбомудровА какой еще? Именно в нем последний выполняемый оператор и именно из него происходит выход из процедуры (с незакрытой транзакцией, что и вызывает ORA-6519) А мне казалось, что выход из процедуры и последний оператор это несколько разные действия. Тем более что есть окончание блока и окончание процедуры и вынесенный отдельно exception на процедуру. Но ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2016, 15:55 |
|
||
|
Функция length
|
|||
|---|---|---|---|
|
#18+
Сергей Арсеньевstax..explicitly rolled back откатывает текущие изменения но не вываливает ж из автономки Увы - нет Код: 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. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. sqlplusm->4.30.614216 a->9.7.634789 a<-6519:4.30.614216 a! m!8.17.678840 -------------false--------- a->7.12.604347 a<-6519:8.17.678840 a!8.17.678840 m!8.17.678840 не точно выразился імхо explicitly, ето явный код программиста (commit/rollback), он может обработать ошибки в тч 6519, и напр закоммитить в Вашем примере ето было-б напр update t set value=id ...; rollback; --транзакцію завершили, но остались в среде автономной update t set value=id+1 ...; commit; имхо implicitly rolled back делать после завершения автономной процедуры (в которой естественной частью есть блок exception) если грубо то -6519 должна возбуждаться в головном (мастер) блоке, поле выхода (end а) ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2016, 16:13 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39359034&tid=1886876]: |
0ms |
get settings: |
6ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
156ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
33ms |
get tp. blocked users: |
1ms |
| others: | 222ms |
| total: | 442ms |

| 0 / 0 |
