如何在 Oracle 的一个事务中执行多个 DDL 语句?

Chr*_*nas 3 oracle sql-server

是否可以使用Oracle数据库(10g 等)在单个事务下执行多个 DDL 语句?我想要完成的是数据库模式的某种“升级”功能。我在 SQL Server 中有一个工作实现,我计划将它移植到 Oracle。

p代码如下:

start transaction

 CREATE TABLE A .....
 CREATE TABLE B ......

 INSERT INTO A....
 INSERT INTO B...


 commit transaction

 or error rollback transaction
Run Code Online (Sandbox Code Playgroud)

Jus*_*ave 5

您可以使用发布在一个事务中的多个DDL语句CREATE SCHEMA命令虽然你是有限的只是CREATE TABLECREATE VIEWGRANT语句。

CREATE SCHEMA AUTHORIZATION <<Oracle username>>
  CREATE TABLE a( col1 number, col2 number ) -- Note no semicolon
  CREATE TABLE b( col3 number, col4 number );
Run Code Online (Sandbox Code Playgroud)

如果您尝试升级现有数据库,根据 Oracle 版本和配置,我倾向于怀疑您最好使用 Oracle Flashback Database 之类的东西。例如,如果您在开始升级之前创建了一个有保证的还原点,则无论您在升级期间提交了多少事务,如果升级失败,您都可以简单地将数据库闪回到该还原点。