【问题标题】:How to avoid manually writing/managing SQL如何避免手动编写/管理 SQL
【发布时间】:2014-03-29 23:58:23
【问题描述】:

我和我的团队正在快速开发一个由 Oracle 数据库支持的 Web 应用程序。我们使用 maven 的插件 flyway 从 INSERT SQL 脚本管理我们的数据库创建和填充。通常我们在每个 sprint 中添加 3-4 个表和/或修改现有的表结构。

我们在生成包含约束的模式的外部工具中对模式进行建模,并首先运行此工具,然后执行 SQL INSERT,以确保所有数据的完整性。

我们花费太多时间来管理对 SQL 的更改以覆盖新表 - 我的意思是向现有 SQL INSERT 语句添加额外的列数据,更不用说手动创建新的 SQL INSERT 数据,尤其是当它们引用外键。

当然还有另一种方法,可能是在 Excel 中维护原始数据并通过解析器将其传递给数据库。有人有什么想法吗?

到目前为止 10 个表和多达 1000 条 SQL 语句,DB 不可用,因此我们在每次构建时都将其拆除。

谢谢

编辑:插入的数据是平台依赖于功能的静态参考数据 - 菜单等。 架构是Tomcat、JSF、Spring、JPA、Oracle

【问题讨论】:

  • 您使用什么语言和框架编写 Web 应用程序
  • JSF、JPA 和 Spring - 谢谢
  • 然后看看 Hibernate - 尽管您仍然需要为每次架构更改更改代码
  • 我们将 excel 与包含 SQL 插入的计算列一起使用。效果很好。
  • 你的意思是EXCEL中的一个宏,它将列作为输入并生成SQL输出?

标签: sql oracle testing flyway data-generation


【解决方案1】:

请将您的原始数据存储在数据库的表中 - 嘿!你到底为什么要为此使用Excel?您拥有 Oracle 数据库 - 完成这项工作的最佳工具!

使用 SQL*Loader 或外部表将未抛光的数据加载到数据库中的常规表中。 从那里你有 SQL - 最强大的 rdbms 工具来操作你的数据。 切勿通过慢速插入来减慢速度。 (1000 条 sql 语句)。请做CTAS。 在加载所有数据后添加/启用约束。

create table t as select * from raw_data; 

or 

insert into t (x,y,z) select x,y,z from raw_data;

使用此方法,您可以绕过 SQL 引擎并进行直接插入(直接路径加载)。这甚至可以并行完成,让您的数据以超快的速度进入数据库!

在 SQL 或 PLSQL 中执行所有数据操作。 (不在应用程序中)

  • 请花时间学习 Oracle 数据库。它有很多功能供您使用!
  • 不要只将它用作数据转储(存储数据的地方)。创建包 - 应用程序的接口 - 数据库的 API。
  • 不要随便乱扔数千条编译到应用程序中的语句。它会变得一团糟。
  • 在数据库 PLSQL 中构建您的业务逻辑 - 使用您的应用程序进行演示。

祝你好运!

【讨论】:

  • +1 但这个答案的措辞可能会更好。与其恳求“请做 X”,不如说“你应该做 X,因为……”。
【解决方案2】:

或者,您还可以选择实施 Java 迁移。它可以读取您拥有的任何输入数据(Excel、csv、...)并进行正确的插入。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-03
    • 2017-09-29
    • 2011-03-22
    • 2021-03-12
    • 1970-01-01
    相关资源
    最近更新 更多