Что эквивалентно транзакциям SQL Server в DB2? - PullRequest
5 голосов
/ 01 мая 2009

Что эквивалентно следующим операторам SQL Server в DB2?

  • Начать транзакцию
  • Подтвердить транзакцию
  • транзакция отката

Ответы [ 3 ]

18 голосов
/ 24 сентября 2012

Ответ на самом деле немного сложнее, чем указано здесь. Правда, транзакции стандартизированы ANSI, и DB2 может их поддерживать.

DB2 для z / OS может сильно отличаться от других вариантов (наиболее распространенным является LUW, Linux-Unix-Windows). Риск скатиться до разглагольствования делает идею говорить о DB2 практически бессмысленной. Вы говорите о каком-то конкретном варианте базы данных IBM, но то, что работает в одной, может быть совершенно неверным в другой. Я предполагаю, что любой вариант, который использовал OP, был не z / OS, так как ответ BEGIN TRANSACTION был принят.

Для тех из вас, кто сталкивался с этой попыткой использовать транзакции с DB2 z / OS, вот краткое изложение: DB2 для мэйнфрейма не имеет явных транзакций. Нет BEGIN TRANSACTION или любой другой сопоставимой конструкции. Транзакции начинаются неявно (обычно называемые единицей работы в документах) и фиксируются или откатываются явно (обычно - многие инструменты с графическим интерфейсом, такие как Toad, имеют функцию автокоммитирования, которая может время от времени подкрадываться к вам).

Из справочного руководства по 9.1 z / OS SQL (стр. 28; доступно по адресу http://www -01.ibm.com / support / docview.wss? Uid = swg27011656 # manual * ):

"Единица работы инициируется, когда начинается процесс подачи заявки. Единица работы также инициируется, когда предыдущая единица работы заканчивается чем-то другим, кроме конец процесса подачи заявки. Единица работы заканчивается операцией фиксации, полная операция отката или завершение процесса приложения. Коммит или откат операция влияет только на изменения базы данных, внесенные в единицу работы, которую она завершает. "

Самое близкое, что вы получаете при написании скриптов, - это вручную указывать точку сохранения.

Это выглядит так:

 SAVEPOINT A ON ROLLBACK RETAIN CURSORS;

 UPDATE MYTABLE SET MYCOL = 'VAL' WHERE 1;

 ROLLBACK WORK TO SAVEPOINT A;

Внешне они напоминают явные транзакции, но это не так. Вместо этого они действительно являются точками времени внутри одной неявной транзакции. Для многих целей их может быть достаточно, но важно знать о концептуальных различиях.

4 голосов
/ 01 мая 2009

См. здесь для примера. Но в основном

BEGIN TRANSACTION
COMMIT TRANSACTION
ROLLBACK
1 голос
/ 18 июля 2018

enter image description here Если вы используете IDE, например Intellij Idea (или другие), то у вас нет возможности явно начать транзакцию. Другими словами, вы не можете ввести «начать транзакцию» в консоли вашей IDE.

Но вы можете отключить «Автоматическую фиксацию» (и включить ее позже), а затем набрать «commit» или «rollback» в консоли.

В IDEA также есть кнопка «коммит» и кнопка «откат». Взгляните на прикрепленный дамп экрана.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...