我已经尝试解决这个问题一段时间了,我认为是时候寻求帮助了。我正在构建一个架构配置脚本,我想添加一些脚本输出和错误处理。这个想法是脚本输出窗口只会向我显示关键消息而没有所有噪音。
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
在 SQL Server 世界中,我通常只用 Red Gate's 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;
这将在第一次遇到错误时爆炸,因此错误语句将位于日志文件的末尾。它也会回滚任何更改,只要没有任何
COMMIT
s(或导致它们的语句,如 CREATE, ALTER, DROP, GRANT
或 REVOKE
),则整个升级要么全有要么全无。
关于oracle - Oracle 脚本中的错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3427513/