DB2 中的以下 SQL Server 语句等效于什么?
答案实际上比这里指出的要复杂一些。确实,事务是 ANSI 标准化的,而 DB2may支持他们。
DB2 for z/OS 与其他变体(LUW、Linux-Unix-Windows,是最常见的)截然不同。冒着陷入咆哮的风险,这使得谈论 DB2 的想法几乎毫无意义。您正在谈论 IBM 数据库的某些特定变体,但在一个数据库中有效的内容在另一个数据库中可能完全无效。我会假设 OP 使用的任何风格都不是 z/OS 风格,因为BEGIN TRANSACTION
答案被接受。
对于那些尝试在 DB2 z/OS 中使用事务时偶然发现这一点的人,以下是概要:用于大型机的 DB2 没有显式事务。没有BEGIN TRANSACTION
或任何其他类似的构造。事务是隐式开始的(通常在文档中称为工作单元)并显式提交或回滚(通常,许多 GUI 工具,如 Toad,具有自动提交功能,有时可能会偷偷地发生)。
来自 9.1 z/OS SQL 参考手册(第 28 页;可在http://www-01.ibm.com/support/docview.wss?uid=swg27011656#manuals):
“当启动应用程序流程时,就会启动一个工作单元。一个工作单元
当前一个工作单元因其他原因结束时也会启动
申请流程结束。一个工作单元由提交操作结束,
完全回滚操作,或应用程序进程的结束。提交或回滚
操作仅影响其结束的工作单元内所做的数据库更改。”
编写脚本时最接近的事情就是手动指定保存点。
这些看起来像这样:
SAVEPOINT A ON ROLLBACK RETAIN CURSORS;
UPDATE MYTABLE SET MYCOL = 'VAL' WHERE 1;
ROLLBACK WORK TO SAVEPOINT A;
从表面上看,这些类似于显式交易,但事实并非如此。相反,它们实际上只是单个隐式事务中的时间点。对于许多目的来说,它们可能就足够了,但重要的是要意识到概念上的差异。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)