Что эквивалентно транзакциям SQL Server в DB2?
-
03-07-2019 - |
Вопрос
Что эквивалентно следующим операторам SQL Server в DB2?
- Начать транзакцию
- Зафиксировать транзакцию
- Откат транзакции
Решение
Видеть здесь для примера.Но в основном
BEGIN TRANSACTION
COMMIT TRANSACTION
ROLLBACK
Другие советы
Ответ на самом деле немного сложнее, чем указано здесь.Действительно, транзакции стандартизированы ANSI, а DB2 может поддержите их.
DB2 для z/OS может сильно отличаться от других вариантов (наиболее распространенными являются LUW, Linux-Unix-Windows).Рискуя скатиться к разглагольствованиям, это делает идею разговора о DB2 практически бессмысленной.Вы говорите о каком-то конкретном варианте базы данных IBM, но то, что работает в одной, может быть совершенно неработоспособно в другой.Я предполагаю, что какой бы вариант ни использовал ОП, это не был вариант z/OS, поскольку BEGIN TRANSACTION
ответ был принят.
Для тех из вас, кто наткнулся на это, пытаясь использовать транзакции с DB2 z/OS, вот краткое изложение:DB2 для мэйнфреймов не имеет явных транзакций.Здесь нет BEGIN TRANSACTION
или любую другую сопоставимую конструкцию.Транзакции начинаются неявно (обычно в документации это называется единицей работы) и фиксируются или откатываются явно (обычно — многие инструменты с графическим интерфейсом, такие как Toad, имеют функцию автофиксации, которая может время от времени подкрадываться к вам).
Из справочного руководства по SQL 9.1 z/OS (стр. 28;доступны на http://www-01.ibm.com/support/docview.wss?uid=swg27011656#manuals):
«Единица работы инициируется, когда инициируется процесс подачи заявки.Единица работы также инициируется, когда предыдущая единица работы заканчивается чем -то другим, чем окончание процесса подачи заявления.Единица работы заканчивается операцией коммита, полной операцией отката или окончанием процесса подачи заявки.Операция Commit или Oflback влияет только на изменения базы данных, внесенные в единицу работы, которую он заканчивает ».
Самое близкое, что вы можете получить при написании сценариев, — это вручную указать точку сохранения.
Они выглядят следующим образом:
SAVEPOINT A ON ROLLBACK RETAIN CURSORS;
UPDATE MYTABLE SET MYCOL = 'VAL' WHERE 1;
ROLLBACK WORK TO SAVEPOINT A;
На первый взгляд они напоминают явные транзакции, но это не так.На самом деле это всего лишь моменты времени в рамках одной неявной транзакции.Для многих целей их может быть достаточно, но важно осознавать концептуальные различия.
Если вы используете IDE, например Intellij Idea (или другие), у вас нет возможности явно запустить транзакцию.Другими словами, вы не можете ввести «начать транзакцию» в консоли вашей IDE.
Но вы можете отключить «Автоматическую фиксацию» (и включить ее позже), а затем ввести «фиксация» или «откат» в консоли.
В IDEA также есть кнопка «фиксировать» и кнопка «откатить».Посмотрите прикрепленный дамп экрана.