是否可以使用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)
您可以使用发布在一个事务中的多个DDL语句CREATE SCHEMA命令虽然你是有限的只是CREATE TABLE,CREATE VIEW和GRANT语句。
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 之类的东西。例如,如果您在开始升级之前创建了一个有保证的还原点,则无论您在升级期间提交了多少事务,如果升级失败,您都可以简单地将数据库闪回到该还原点。