我已经有了一个程序,定期更新其数据库架构。有时候,一发言的发言可能会失败,并且如果它不,我要回滚所有的变化。我包裹在一交易,像这样:

BEGIN TRAN;

CREATE TABLE A (PKey int NOT NULL IDENTITY, NewFieldKey int NULL, CONSTRAINT PK_A PRIMARY KEY (PKey));
CREATE INDEX A_2 ON A (NewFieldKey);
CREATE TABLE B (PKey int NOT NULL IDENTITY, CONSTRAINT PK_B PRIMARY KEY (PKey));
ALTER TABLE A ADD CONSTRAINT FK_B_A FOREIGN KEY (NewFieldKey) REFERENCES B (PKey);

COMMIT TRAN;

因为我们正在执行,如果其中一个发言失败,我做一个回退而不是提交。这个伟大的作品就SQL服务器,但是没有预期的效果在Oracle。Oracle似乎做一个隐含的承诺之后每言声明:

有没有 任何 方式,以关闭这种隐含的承诺?

有帮助吗?

解决方案

你不能把这个关闭。相当容易的工作,围绕通过设计你的脚本的下降表在该事件,他们已经存在等等。

你可以看一下在使用数据库闪回,我相信你可以做这个在架构/象的水平,但检查文档,确认这一点。你将需要于10G为,工作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top