oracle - Oracle 脚本中的错误处理

标签 oracle plsql

我已经尝试解决这个问题一段时间了,我认为是时候寻求帮助了。我正在构建一个架构配置脚本,我想添加一些脚本输出和错误处理。这个想法是脚本输出窗口只会向我显示关键消息而没有所有噪音。

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, GRANTREVOKE ),则整个升级要么全有要么全无。

关于oracle - Oracle 脚本中的错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3427513/

相关文章:

java - 如何在java中为UTF8字符串做子串?

sql - Oracle中以毫秒为单位的时间戳之间的差异

oracle - 将光标记录传递给函数

python - Docker python 使用 ODPI-C 进行 Oracle 数据库连接

sql - 更改表添加约束时出错

mysql - mysql、mssql、oracle 相同的 SQL 连接运算符

c# - C# 中的 XML 解析(在 C# 中修复 XML 文档)

Oracle 序列 nextval 和 currval 令人困惑

oracle 集合没有足够的值

c# - 如何在 C# 应用程序中设置 TNSNAMES 文件的正确路径?