基于PLSQL数据手工导入方案
1. 问题域
在我们日常工作中,经常遇到需要将数据导入数据库中。这些数据的格式通常不一样,且数据量不是很大,时不时就会有这样的需求。要将这些数据导入数据库中,我们通常有三种实现方式。
1) 写插入脚本
缺点是不灵活,容易出错,如果数据量较大需耗费较多的工作量;
2) 在程序中新增一个导入数据功能
缺点是不灵活,耗费较多工作量,导入数据格式不同或者导入的表不同需开发不同的功能;
3) 使用数据迁移工具
缺点是成本巨大,需要资源较多,使用在小数据量上比较浪费,犹如杀鸡用牛刀。
那除了这三种实现方式,有没有更简单的方法呢?只需要拷贝粘贴就可导入,有!那接下来我们就看我是如何实现的吧!
2. 最佳实践
2.1.操作目标
将提供的EXCEL文档《人员补扣信息》中的数据导入到W_DEDUCT表中。下图为提供的文档部分截图:
2.2.数据准备
在数据库中查询,W_DEDUCT的当前主键ID的最大值,或该表sequence的下一个值;
查询sequence的下一个值查询脚本:
selectseq_w_deduct.nextval from dual(seq_w_deduct为W_DEDUCT的sequence)
2.3.调整格式
调整EXCEL文档《人员补扣信息》的样式:
a) 去掉多余的列(即数据库中不需要的列,如文档中的姓名列),
b) 新增需新增的列(即文档中没有,但数据库需要的列,如主键ID列),
c) 在文档首列新增一列空白列(注意,此步很重要,后面会说明)
调整后文档如下图所见:
2.4.导入准备
打开PLSQL,新建SQL WINDOW,在新建的窗口中写W_DEDUCT的查询脚本,查询应注意以下事项:
a) 使用语句,用来手工加锁并操作数据;
b) 不需要用,应确保查询出来的列与EXCEL的列相对应(注意查询时不要出现重复的列);
c) 用此方法插入数据时,为不影响基础数据,for update时,不要有查询信息,可以用1 = 2此类不成立的条件来过滤
查询脚本如下图所示:
2.5.导入数据
a) 执行脚本,执行后出现以下窗口:
b) 单击结果窗口工具栏的小锁,解锁结果窗口:
c) 复制EXCEL文档中的数据(按行复制,为避免EXCEL中的列与查询出的列不一致,可将EXCEL首行即标题行一起复制)
d) 到PLSQL中已解锁的窗口,单击两次表头下 一行的首列,选中首行,如下图:
e) 选择粘贴,将数据粘贴到结果窗口中,如下图
f) 确认各列都与列表对应上,选中首行后单击结果窗口工具栏的减号,删除首行:(如选择数据时未选中标题行,此步骤可省略)
2.6.提交数据
a) 确认数据无误后,单击结果窗口工具栏的绿色勾勾,确认插入数据:
b) 单击结果窗口工具栏的小锁,锁定窗口:
c) 单击工具栏的commit按钮,提交事务:、
3. 总结
就这样,应用EXCEL和PLSQL工具,整理完数据,写好查询脚本,通过复制、粘贴简简单单的就将数据插入到数据库中。那下一次,再看我如何应用EXCEL、PLSQL、以及文本编辑器,处理一些较复杂的数据,并将其转换为生产上能执行的INSERT脚本。