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