如何避免手动编写/管理SQL

时间:2014-02-26 21:20:40

标签: sql oracle testing flyway data-generation

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

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

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

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

到目前为止10个表和最多1000个SQL语句,数据库不存在,所以我们在每次构建时将其删除。

由于

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

2 个答案:

答案 0 :(得分:4)

请将原始数据存储在数据库的表中 - 嘿!为什么你要在这个地方使用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 :(得分:0)

或者,您也可以选择实现Java迁移。它可以读取你拥有的任何输入数据(Excel,csv,...)并进行适当的插入。