Задавайте вопросы, мы ответим
Вы не зашли.
Добрый вечер, у меня возникла следующая проблема. Есть ХП которая в транзакции вызывает другую ХП, в последней в свою очередь находятся условия для завершения транзакции или ее отката. Так вот когда во второй ХП срабатывает условие, например А=В, то почему то транзакция не откатывается, и данные заносятся в базу. Простой пример второй ХП:
Отредактированно simple (13.06.2011 23:41:45)
Неактивен
Так вот именно в этом условии и не срабатывает ROLLBACK, хотя условие выполняется, SELECT выводит 0. Но данные все равно сбрасываются на диск, причем каких либо ошибок клиент не выдает. Покопавшись немного методом тыка убрал SELECT в обработчики EXIT HANDLER SQL FOR NOT FOUND. И о чудо, транзакция началась откатывать на данном условии, но ведь это бред полный, неужели все дело было в этом SELECTe в обработчики??? Кстати есть еще интересный момент, в ХП1 имеется запрос к метаданным к базе INFORMATION_SCHEMA
Неактивен
Если Вы лезете за следующим значением автоинкремента в INFORMATION_SCHEMA —
Вы уже роете могилу своему приложению. Опомнитесь и никогда, никогда (я говорил
«никогда»?) не выбирайте следующее значение. Вставьте строку — а потом уже от
вставленного значения отталкивайтесь.
Что касается обработчиков. Обработчики вызываются тогда, когда происходит собы-
тие. Если Вы создаете обработчик CONTINUE, то управление потом возвращается в
место, где произошло событие. В Вашем случае Вы явно указываете, что возвращаться
не надо — вот управление до ROLLBACK и не доходит. А второй SELECT 1 нужно просто
прочитать
Неактивен
paulus написал:
Если Вы лезете за следующим значением автоинкремента в INFORMATION_SCHEMA —
Вы уже роете могилу своему приложению. Опомнитесь и никогда, никогда (я говорил
«никогда»?) не выбирайте следующее значение. Вставьте строку — а потом уже от
вставленного значения отталкивайтесь.
А чем собственно плохо обращаться к метабазе? Как еще поступить если мне нужно дублировать в ячейку auto_inrement вставленной строки , в процессе вставки ведь ни как до значения auto_incrementa не добраться
Неактивен
Почему нет? Вставили — и LAST_INSERT_ID() к Вашим услугам.
Неактивен
Вы про это говорите? INSERT INTO table SET a=1,b=1,copy_autoincrement=LAST_INSERT_ID();? Не работает к сожалению, только в два запроса получится первый вставка,второй апдейт.
Неактивен
Не поверите, автоинкрементное поле заполнится самостоятельно, Вам не нужно
ничего для этого делать
Неактивен