积跬步,聚小流------oracle快捷添加测试数据

前一阵子在实施中发现问题,需要当时进行修改,而因为数据库中数据是真实数据,不能进行修改,否则会出大纰漏吧,于是添加测试数据来方便修改,而单个添加效率太低下了,所以解决的办法就是以真实的数据为模板增添新方便删除的数据即可,就像将2014年的数据复制一份只将年份进行修改,删除的时候讲这个不存在的年份数据删除即可。

相信大家很容易会想到这个方法,也很容易做出答案,举个例子:

技术分享

看这个表,因为主键中都是以当年年份开头的,同时年度也是当年年份,这样我们就可以进行添加修改:

假使说这个表格存在如下列:

btfid、production、code、retrieveid、location、tobaccostation、plantvillage、cooperation、tobaccotechnician、eastlong、eastlat、southlong、southlat、westlong、westlat、northlong、northlat、amsl、totalarea

那样我们可以可以这样写:

insert into 
arc_basictobaccofield
select '2016' || substr(btfid, 5),
       '2016',
       code,
       retrieveid,
       location,
       tobaccostation,
       plantvillage,
       cooperation,
       tobaccotechnician,
       eastlong,
       eastlat,
       southlong,
       southlat,
       westlong,
       westlat,
       northlong,
       northlat,
       amsl,
       totalarea
  from arc_basictobaccofield
 where tobaccostation = '37030405C'
   and productionyear = 2015

然后在删除的时候只需要将年份为2016的全部删除即可,但是这里还存在一个问题,实际上表的属性可能不仅仅只有这么点列,事实上,就算只有这几列,也远远大于我们需要修改的两列数据了,我们是不是可以有更好的办法来解决它呢?

答案是肯定的,这样我们倒过来思考下,我们只需要修改两列而已,那我们就把所有数据取出来,将这两列数据修改之后进行插入不就可以了么,我们来写下看:

首先我们来创建一个临时表:

create table arc_basictobaccofield1 as 

select * from arc_basictobaccofield where tobaccostation='37030405C' and productionyear=2015

然后我们将需要修改的列进行修改:

update arc_basictobaccofield1 set productionyear=2015

update arc_basictobaccofield1 set btfid ='2015'||substr(btfid,5)

这时候将修改后的数据导入我们需要导入的表中:

insert into arc_basictobaccofield select * from arc_basictobaccofield1

最后这一步还是很关键的,千万不能忘掉:检查导入数据,然后删除临时表

drop table arc_basictobaccofield1

这样再来看,是不是不需要估计真实表究竟有多少列了呢,可见许多时候换个思考方式还是很有效率的


技术分享


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。