关闭

oracle批量构造数据方法

发表于:2010-11-30 10:22

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:rd_clp    来源:51Testing软件测试博客

  1、一种是只要数据条数,至于里面内容可以是序列方式,另外可能几个表中相互id的关联,那建议用存诸过程写。

  表a(id,name)有学员的信息

  表b(id,testid,subject,score)有学员的考试成绩

  假设表a与表b的id都是有seq的自增长系列;表b。testid=表a。id,现需要构造一千个学员和科目学分。

  以下存储过程内容:

declare
cnt number;
mytestid number;
myname varchar2(32);
mysubject varchar2(32);
cnt:=1;
myname:="studentname"
mysubject:="subjectname"
loop
if (cnt<=1000)then
select seq_a.nextval into mytestid from dual;
insert into a (id,name) values (mytestid,myname||cnt);
insert into b(id,testid,subject,scre)values

(seq_b.nextval,mytestid,mysubject||cnt,80);

cnt:=cnt+1;
else
exit;
end id;
end loop;
commit;
end;

  另一种方法:数据的内容要多样化,且内容要真实一些,不可以是用cnt的内容,那建议用cvs的方式准备好各类内容数据,运行一个脚本即可。

  假设学员信息表A已有,现需要1000条真实科目分数数据。

  第一步:先准备ctl脚本:如:b.ctl (可以用记事本方式写)

1.options (skip=1,rows=100)
2.load data
3.infile "b.csv"
4.truncate
5.into table b
6.fields terminated by ","
7.optionally enclosed by '"'
8.trailing nullcols
9.(
10. id "seq_b.nextval",
11. testid,
12. subject,
13. score
14 )

  以上ctl每行详细说明:

  1.skip 跳过csv文件的第一列(一般第一列为列名);rows表示每次取多少条运行,分批运行减少性能问题

  3.是你csv的文件的名字

  4.写入数据库的方式:truncate为清除表中数据后,写入csv中的内容;append为直接把csv中内容追加入数据库;主要用到这二个,其他不介绍了。

  5. 写入数据库的表名

  6,7行建议不要改动,为数据分隔处理用

  10-13注意:有seq的,需要像10那样写,如果有date类型,举列,字段列名为modify_time的则写成: modif_tiyme date‘yyyy-mm-dd hh24:mi:ss'

  第二步:准备b.CSv内容,请xls里直接录入即可

  csv第一列 id testid subject score

  第三步:用sqlldr执行

  注意:oracle客户端装好后,要把oracle\bin目录加到环境变量里去,这样才能使用sqlldr.exe可执行文件

  步骤:

  在你的windows端,打开,点运行,录入cmd,切换到你存上面二个文档的目录,然后录入以下格式:sqlldr 数据库登录名/密码@数据库名  control=b.ctl

版权声明:本文出自rd_clp的51Testing软件测试博客:http://www.51testing.com/?368811

原创作品,转载时请务必以超链接形式标明本文原始出处、作者信息和本声明,否则将追究法律责任。

《2023软件测试行业现状调查报告》独家发布~

精彩评论

  • lynnjiang
    2010-11-30 13:26:59

    这个很适合我现在用,谢谢~~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号