2015-08-28 2 views
0

Я вызываю хранимую процедуру в другую стробированную процедуру, теперь, если первая хранимая процедура дает какую-либо ошибку, тогда я хочу откатить транзакцию этой хранимой процедуры, так как DB2 завершает транзакцию Хранимой процедуры после завершения вызова.Как отменить транзакцию хранимой процедуры, вызвав другую процедуру в db2

Итак, как это сделать?

+0

Не могли бы вы предоставить подробную информацию о потоке? Регулярное поведение заключается в том, что изменения внутренней хранимой процедуры также будут отменены. DB2 также имеет так называемые «автономные транзакции», но вам нужно явно сделать так называемую процедуру. –

+0

Предположим, что я вызываю процедуру A в другую, которая имеет имя B, поэтому если теперь, если в процедуре A возникла какая-либо ошибка, она не будет откатна, потому что я вызываю ее в B. – Govind

ответ

0

Из вашего описания это звучит так, как ваше приложение выполняет CALL B(). И хранимая процедура B выполняет оператор CALL A().

Если ни одна из хранимых процедур включает в себя COMMIT заявления (которое идет вразрез с передовой практикой), то есть до вызывающего приложения, чтобы определить, является ли CALL B() заявление было успешным или нет, и решить, следует ли выдавать COMMIT или ROLLBACK заявление. Выполнение ROLLBACK должно откат любых/всех изменений, сделанных B и A.

+0

Фактически я вызываю процедуру в другую процедуру, когда моя родительская процедура дает какую-либо ошибку, тогда она не может откатить транзакцию, совершенную дочерней процедурой, которую я вызываю в этом , так что вы знаете, как откатить транзакцию? – Govind

+0

Пожалуйста, отправьте код, который показывает, что происходит. –

+0

Я решаю его собственный, используя атом в db2. Спасибо – Govind

Смежные вопросы