Oracle - 在事务中执行几个sql文件

时间:2011-12-04 10:14:05

标签: oracle

我有几个sql文件。我需要在事务中执行它们。发生错误时,将回滚所有更改。

这可以使用sqlplus或其他工具吗?

编辑这些文件中没有任何显式提交,只有DDL sql。

3 个答案:

答案 0 :(得分:3)

通常:这是否可行取决于SQL文件的内容 - 例如:

  • 有明确的COMMIT吗?
  • 是否涉及任何存储过程?
  • 有没有DDL命令?
  • 是否涉及任何数据库链接?

等。

如果您不知道/无法控制SQL文件的内容,我会说没有..

如果您可以确保文件不包含任何COMMIT,任何DDL,任何存储过程调用等等。那么您可以将它们连接起来并在一个事务中执行它们...如何做到这一点完全取决于你的工具......

UPDATE - 在OP添加SQL文件包含DDL命令之后:

答案是否定的,因为DDL命令使用隐式COMMIT - 尽管某些DB可能允许某些“解决方法”(例如Oracle有一个可配置的“闪回区域”,可能会被“滥用”以实现你的目的想要),但大部分都没有。

解决此问题的常用方法(DDL脚本/事务)是编写2个脚本 - 一个用于进行所有更改...第二个脚本仅在执行第一个时发生错误时运行...如何写这样的脚本取决于你的具体情况。

答案 1 :(得分:1)

使用start命令,whenever sqlerror然后不提交。

答案 2 :(得分:1)

在Oracle中,每个DDL(数据定义语言)命令(如CREATE ...,ALTER ...或DROP ...)都会在语句之前和之后隐式提交。因此,由于您的SQL文件包含此类语句,因此不能为它们提供单个事务。

这不是使用多个文件的限制。这是所有Oracle DDL语句的限制。