Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Установка обработчика ошибок ВНЕ процедуры
|
|||
|---|---|---|---|
|
#18+
miksoft, хм. Проверил на своей 5.7.15 - действительно через execute не закоммитил запросы с ошибками, даже выполненные через source. Прерывает выполнение при первой встреченной ошибке и остальные запросы уже не пытается исполнять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2016, 16:13 |
|
||
|
Установка обработчика ошибок ВНЕ процедуры
|
|||
|---|---|---|---|
|
#18+
Продолжаем издеваться и убираем транзакцию: Код: powershell 1. 2. 3. Проверяем (SELECT * FROM tree;) и да - есть результаты первого инсерта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2016, 16:16 |
|
||
|
Установка обработчика ошибок ВНЕ процедуры
|
|||
|---|---|---|---|
|
#18+
Melkijmiksoft, хм. Проверил на своей 5.7.15 - действительно через execute не закоммитил запросы с ошибками, даже выполненные через source. Прерывает выполнение при первой встреченной ошибке и остальные запросы уже не пытается исполнять. не закомитил - выполнил ролбэк??? тоесть результаты первых """успешно""" выполненных проигнорил? я правильно понял ваш тест? (это правильно поведение транзакции поидее) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2016, 16:20 |
|
||
|
Установка обработчика ошибок ВНЕ процедуры
|
|||
|---|---|---|---|
|
#18+
Попробовал воспроизвести. Не получилось. Записи, добавляемые в корректных запросах, исправно пополнили таблицу. Server version: 5.7.16-log MySQL Community Server (GPL). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2016, 16:23 |
|
||
|
Установка обработчика ошибок ВНЕ процедуры
|
|||
|---|---|---|---|
|
#18+
AkinaПопробовал воспроизвести. Не получилось. Записи, добавляемые в корректных запросах, исправно пополнили таблицу. Server version: 5.7.16-log MySQL Community Server (GPL). Стоп. Записи в корректных запросах должны пополнять таблицу. И таблица не должна пополняться никакими записями, если хотя-бы одна не верна. Так что вы проверили только первую часть - поплнение верными данными если все верны. Или я что-то не так понял? Можно поточнее описывать то что вы на вход так сказать даёте? =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2016, 16:31 |
|
||
|
Установка обработчика ошибок ВНЕ процедуры
|
|||
|---|---|---|---|
|
#18+
ZlatovMelkijmiksoft, хм. Проверил на своей 5.7.15 - действительно через execute не закоммитил запросы с ошибками, даже выполненные через source. Прерывает выполнение при первой встреченной ошибке и остальные запросы уже не пытается исполнять. не закомитил - выполнил ролбэк??? тоесть результаты первых """успешно""" выполненных проигнорил? я правильно понял ваш тест? (это правильно поведение транзакции поидее) Да, rollback и ничего сохранено не будет. Это как раз нормальное поведение, в отличии от моего примера с ruSO. Скорей всего клиент не командует rollback сам, а просто отключается. Отключение клиента при открытой транзакции вызывает rollback. Без транзакции - тоже нормальное поведение, первый результат закоммитился до начала выполнение второго и поэтому не был отменён. AkinaПопробовал воспроизвести. Не получилось. Записи, добавляемые в корректных запросах, исправно пополнили таблицу Все запросы в командах были корректны? Или записались только корректные при наличии одного или нескольких некорректных, но те запросы пропустились? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2016, 16:32 |
|
||
|
Установка обработчика ошибок ВНЕ процедуры
|
|||
|---|---|---|---|
|
#18+
Полный стек кода так сказать (код весь ручками писался, прям каждая кавычечка): Код: sql 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. файлик для теста (bashtransaction.sql): Код: sql 1. 2. 3. Запускаем из консоли Код: powershell 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2016, 16:42 |
|
||
|
Установка обработчика ошибок ВНЕ процедуры
|
|||
|---|---|---|---|
|
#18+
MelkijВсе запросы в командах были корректны? Или записались только корректные при наличии одного или нескольких некорректных, но те запросы пропустились? Так, поспешил, был неточен. Запускались .sql приблизительно такого контента: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Если запускается из консоли - выполняются все запросы, кроме ошибочного. Если запускается из командной строки - выполняются все запросы до ошибочного, откат к началу транзакции (при отсутствии неоткатываемых или тех, что до последнего запроса, вызывающего безусловную фиксацию). Где транзакция - в файле или в --execute - неважно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2016, 17:02 |
|
||
|
Установка обработчика ошибок ВНЕ процедуры
|
|||
|---|---|---|---|
|
#18+
Zlatov, какой смысл того что вы хотите? приведите ворк-флоу, юс-кейс... кроме бегин-комит-ролбак можно продумать аналогичные логические ворк-флов, если это вообше возможно. примерный подход -- писать код который НЕ сломается, а ексепшн будет отмечен и записан. Затем проходит логическая проверка результата и делается ручной комит или ролбак. Ноте-1: не все ошибки можно задавить.... Ноте-2: логические/ручные трансакции хуже чем родные трансакции в плане стабильности ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2016, 18:33 |
|
||
|
Установка обработчика ошибок ВНЕ процедуры
|
|||
|---|---|---|---|
|
#18+
javajdbcZlatov, какой смысл того что вы хотите? приведите ворк-флоу, юс-кейс... кроме бегин-комит-ролбак можно продумать аналогичные логические ворк-флов, если это вообше возможно. примерный подход -- писать код который НЕ сломается, а ексепшн будет отмечен и записан. Затем проходит логическая проверка результата и делается ручной комит или ролбак. Ноте-1: не все ошибки можно задавить.... Ноте-2: логические/ручные трансакции хуже чем родные трансакции в плане стабильности Изначально я хотел вне всяких процедур декларировать прослушку на ошибки для своевременного отката, поясню: Есть текстовый файлик с 100500 иструкциями вставки. Было желание просто подать его на вход консольного mysql или в PDO->exec() и причем не заботиться проверкой была ли там ошибка или нет и ручками не писать commit или rollback - Сам файл должен был заботиться и содержать в себе код для отлова ошибок и rollback. Что уже звучит довольно бредово)))) Нет, конечно все возможно, но это неправильный путь изобретения велосипедов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2016, 08:38 |
|
||
|
Установка обработчика ошибок ВНЕ процедуры
|
|||
|---|---|---|---|
|
#18+
ZlatovИзначально я хотел вне всяких процедур декларировать прослушку на ошибки для своевременного отката1) Ошибка может быть ТОЛЬКО внутри solid statement (процедуры, функции, триггера или одиночного запроса). 2) Обработчик ошибки имеет скоп solid statement (глобальный - не переопределяется), а потому имеет смысл только внутри скопа соотв. типа. Если он вне скопа, у него отсутствует область видимости. ZlatovЕсть текстовый файлик с 100500 иструкциями вставки. Было желание просто подать его на вход консольного mysql или в PDO->exec() и причем не заботиться проверкой была ли там ошибка или нет и ручками не писать commit или rollback - Сам файл должен был заботиться и содержать в себе код для отлова ошибок и rollback. Ну так и рисуйте этот хэндлер внутри "файлика", а сами инструкции оберните в процедуру и добавьте строку её запуска. Или оформите выполнение инструкций файла из статической ХП с соотв. хэндлером. Кстати, можно будет там даже натыкать SAVEPOINT-ов, если файл содержит несколько самостоятельных блоков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2016, 10:51 |
|
||
|
Установка обработчика ошибок ВНЕ процедуры
|
|||
|---|---|---|---|
|
#18+
Akina, Вот именно _незнание_ вашего первого пояснения послало меня писать "отлов" ошибок вне "solid statement". Сейчас кое что (но далеко не всё) в моей голове стало на свои места. Спасибо всем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2016, 11:36 |
|
||
|
Установка обработчика ошибок ВНЕ процедуры
|
|||
|---|---|---|---|
|
#18+
AkinaZlatovИзначально я хотел вне всяких процедур декларировать прослушку на ошибки для своевременного отката1) Ошибка может быть ТОЛЬКО внутри solid statement (процедуры, функции, триггера или одиночного запроса). 2) Обработчик ошибки имеет скоп solid statement (глобальный - не переопределяется), а потому имеет смысл только внутри скопа соотв. типа. Если он вне скопа, у него отсутствует область видимости. ZlatovЕсть текстовый файлик с 100500 иструкциями вставки. Было желание просто подать его на вход консольного mysql или в PDO->exec() и причем не заботиться проверкой была ли там ошибка или нет и ручками не писать commit или rollback - Сам файл должен был заботиться и содержать в себе код для отлова ошибок и rollback. Ну так и рисуйте этот хэндлер внутри "файлика", а сами инструкции оберните в процедуру и добавьте строку её запуска. Или оформите выполнение инструкций файла из статической ХП с соотв. хэндлером. Кстати, можно будет там даже натыкать SAVEPOINT-ов, если файл содержит несколько самостоятельных блоков. ...ок, боль-мень понятно... можно рассмотреть такой вариант: 1. грузить строки в большое техтовое поле, т.е. задумать процез загрузки который не ломается 2. парсить строчки уже внутри базы, внутри отдельной процедуры со всеми еррор-чандлерами и любой сложной дополнительной логикой. совмещать большую загрузку и сложную логику -- в общем виде -- некамильфо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2016, 15:02 |
|
||
|
Установка обработчика ошибок ВНЕ процедуры
|
|||
|---|---|---|---|
|
#18+
Ещё разумнее - выгружать где-то и потом загружать тут только данные. SELECT INTO OUTFILE и соответственно LOAD DATA INFILE в помощь. А структуру, если она неизвестна, можно передать в форме скрипта. Отдельно от данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2016, 18:48 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39367924&tid=1831078]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
35ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
| others: | 14ms |
| total: | 156ms |

| 0 / 0 |
