我一直在尝试解决这个问题,我认为现在是时候寻求帮助了.我正在构建模式配置脚本,我想添加一些脚本输出和错误处理.这个想法是脚本输出窗口只显示没有所有噪音的关键信息.
Create Temporary Error Table
Begin Transaction
-- begin work block
Print "Doing some types of work"
-- do work here
If Error and Active Transactions > 0 Then Rollback
If Active Transactions = 0 Then Insert Error In Temp Error Table and Start Another Transaction
-- end work block
-- once all all work complete
If Active Transactions > 0 Then Commit Transactions
Run Code Online (Sandbox Code Playgroud)
在SQL Server世界中,我通常会使用Red Gate的SQL Packager来解决这个问题(提示,提示Red Gate - 我们需要一个Oracle版本:)).有关从哪里开始使用Oracle获得类似内容的任何想法?
在 Oracle 中,您定义事务边界——完成后提交,并且每个语句都是原子的。
如果您使用 SQL*Plus 并且在出现问题时根本不希望提交任何内容,则可以将以下内容放入 SQL 脚本中:
SET ECHO ON
SPOOL /some/path/to/logfile.log
WHENEVER SQLERROR EXIT SQL.CODE ROLLBACK
-- run your code or DML statements
COMMIT;
EXIT;
Run Code Online (Sandbox Code Playgroud)
这将在第一次遇到错误时爆炸,因此错误语句将位于日志文件的末尾。它还会回滚任何更改,因此只要没有任何COMMITs (或导致它们的语句,如CREATE, ALTER, DROP, GRANT、 或REVOKE),那么整个升级就是全有或全无。