oracle - 创建可重新运行的 Oracle DDL SQL 脚本

标签 oracle plsql oracle10g

我们的开发团队在本地机器上进行所有开发,包括数据库。当我们对模式进行更改时,我们将 SQL 保存到一个文件中,然后将该文件发送到版本控制系统(如果有更好的做法,我也愿意听取)。

在 SQL Server 上工作时,我们会将更新包装在“if exists”语句周围,使它们可以重新运行。我没有在 Oracle 10g 项目上工作,我找不到任何做同样事情的 oracle 函数。我能够找到 this dbaforums.org 上的线程,但这里的答案似乎有点笨拙。

最佳答案

我假设这是为了某种自动化构建过程并在出现问题时从头开始重做构建。

正如 Shannon 指出的那样,过程、函数和包等 PL/SQL 对象具有“创建或替换”选项,因此第二次重新编译/重新运行就可以了。赠款也应该没问题。

对于表创建和 DDL,您可以采用以下方法之一。

1) 不要向脚本添加任何删除命令,并要求您的开发团队为各个模块提供恢复脚本。

因此,对于他们添加到构建中的每个创建表,他们都会将等效的“DROP TABLE..”添加到脚本“build_rollback.sql”中。如果您的构建失败,您可以在从头开始构建之前运行此脚本。

2) 第二种(也是我见过的最常用的方法)是在创建表语句之前包含 DROP 表,然后忽略构建日志中的“表或 View 不存在”错误。像..

DROP TABLE EMP;
CREATE TABLE EMP (
   .......
   .......
);

您发布的帖子存在重大缺陷。最重要的一点是您始终以增量方式创建表。例如,您的数据库已经有 100 个表,并且您要添加 5 个表作为此版本的一部分。该脚本为所有 100 个表假脱机 DROP 创建,然后执行它,这没有多大意义(除非您是第一次构建数据库)。

关于oracle - 创建可重新运行的 Oracle DDL SQL 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6750454/

相关文章:

php - 无法选择 * (ORA-00932 : inconsistent datatypes: expected CHAR got ADT)

java - 如何确定 JAVA 中 jdbcTemplate 的 sql 查询类型?

oracle - 如何从 Lisp 运行 Oracle plsql 过程?

stored-procedures - Oracle 存储过程中的 Unicode

null - 不是有一个开关来切换 Oracle 的空 varchar2 - null 行为吗?

oracle - Delphi - Oracle RowID 被 dbGO/ADO 忽略

java - Oracle Java 存储函数 - CLOB 的数据类型不一致

sql - 试图理解 PLSQL 函数

database - 甲骨文硬解析

performance - 如何分析 Oracle 存储过程的端到端性能