基于Oracle中的CREATETABLE语句生成修改表的升级脚本

基于Oracle中的CREATETABLE语句生成修改表的升级脚本,oracle,oracle11g,ddl,oracle11gr2,Oracle,Oracle11g,Ddl,Oracle11gr2,在Oracle中,是否可以基于schema中的现有表以及具有较新表定义的CREATE TABLE语句生成一组ALTER TABLE语句 假设我有一个带有某个应用程序早期版本的模式。我有一个应用程序最新版本的安装脚本。脚本从头开始创建所有表和序列,执行createtable(可能还有createsequence)语句 我希望在不丢失任何数据的情况下(例如,不执行DROP TABLE)将架构更新到应用程序的最新版本 是否可以使用标准Oracle 11gR2或第三方组件?您可以在PLSQL中创建一个过

在Oracle中,是否可以基于schema中的现有表以及具有较新表定义的CREATE TABLE语句生成一组
ALTER TABLE
语句

假设我有一个带有某个应用程序早期版本的模式。我有一个应用程序最新版本的安装脚本。脚本从头开始创建所有表和序列,执行
createtable
(可能还有
createsequence
)语句

我希望在不丢失任何数据的情况下(例如,不执行
DROP TABLE
)将架构更新到应用程序的最新版本


是否可以使用标准Oracle 11gR2或第三方组件?

您可以在PLSQL中创建一个过程来:

  • 在新数据库中不存在新表时创建新表
  • 当表存在时,对其进行更改,并向其提供所有的\u TAB\u列

你可以试试CORT:它是免费的

没有我100%信任的工具可以做到这一点。但是,使用DBMS\u METADATA\u DIFF的一些小脚本可能会帮助您完成大部分工作。取决于您到底在寻找什么,这个问题可能是重复的。@Jon Heller不是DBMS_METADATA_DIFF额外成本选项?@Politank-Z,我的问题不是关于迁移,而是关于正常安装的自动化。我看到了这个问题,但它问的是比较两个模式(源模式和目标模式),而我的问题问的是比较一个模式与
创建表
@ibre5041是的,它需要Oracle变更管理包。这不是一个选项,因为我必须解析CREATE TABLE语句才能获得缺少的列的列表。通过比较所有的\u TAB\u列,您无法找到缺少的列?如果不先在其他架构上执行我的
CREATE TABLE
,我将无法找到缺少的列。这可能会很昂贵,并且由于可能的
外键
s约束,无法为每个
创建表
单独执行。我必须首先在辅助数据库上运行整个安装脚本,我希望避免此步骤。它看起来正是我所需要的。如果您对如何使用它或如何组织您的源代码有任何疑问,请通过网站的电子邮件与我联系谢谢!CORT看起来非常有前途,通过
DDL触发器
s处理修改的想法非常棒。