我有几个sql文件。我需要在事务中执行它们。当发生错误时,所有更改都将回滚。
这可以使用 sqlplus 或其他工具吗?
编辑这些文件中没有任何显式提交,只有 DDL sql。
最佳答案
通常:这是否可能在很大程度上取决于 SQL 文件的内容 - 例如:
- 是否有明确的
COMMIT
? - 是否涉及任何存储过程?
- 有 DDL 命令吗?
- 是否涉及任何数据库链接?
等等。
如果您不知道/无法控制 SQL 文件的内容,我会说不..
如果您可以确保文件不包含任何 COMMIT
、任何 DDL、任何存储过程调用等。那么您可以将它们连接起来并在一个事务中执行它们...如何做到这一点完全取决于您的工具...
更新 - OP 添加 SQL 文件包含 DDL 命令后:
答案是否定的,因为 DDL 命令使用隐式 COMMIT
- 尽管某些数据库可能允许一些“解决方法”(例如 Oracle 有一个可配置的“闪回区域”,可以“滥用”实现你想要的)但大多数人没有。
解决这个问题(DDL 脚本/事务)的通常方法是编写 2 个脚本 - 一个用于进行所有更改...第二个脚本仅在执行第一个脚本时发生错误时运行...具体如何编写此类脚本取决于您的具体情况。
关于Oracle - 在一个事务中执行多个sql文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8374606/