刚刚接触ORACLE,简单的谈一下最近对SQLLDR的学习
SQL*Loader 是一个命令行下的工具,它使用存在于客户端的脚本来操作本地/远程的数据库,顾名思义,它的作用就是将数据导入到ORACLE数据库中,它在使用时需要控制文件和数据文件(可选),最简单的命令格式为SQLLDR [USER][/PASSWORD] CONTROL = 控制文件名。
1.a)首先先进行一下简单的测试,在ORACLE中用SCOTT用户建立表FRUITMARKET(FID NUMBER,FNAME VARCHAR2(10),PRICE VARCHAR2(10),ADDRESS VARCHAR2(5))
b)建立控制文件fruit.ctl
c)在dos环境下执行SQLLDR SCOTT CONTROL=fruit.ctl
d)执行成功,用SQLPLUS登入ORACLE数据库查看表中数据,导入成功
2.下面对控制文件进行简单的分析,第一行LOAD DATA 是最常用的用法,还有些参数比较复杂,我也没接触过,就不讨论了
第二到六行是控制文件的一些语法:
a)第二行表示数据文件的位置,INFILE 文件名。由于fruit.ctl的数据文件包含在此控制文件中,所以文件名的位置用*代替
b)第三行表示要将数据导入到哪张表中,TRUNCATE INTO TABLE FRUITMARKET,第一个参数TRUNCATE的作用下面再说
c)第四行表示字段是以'|'符号来分割的,当然其他符号也可以,只要数据文件中的分隔符和这里指明的一致即可
d)第五行表示表中的字段名,字段的顺序可以与表中不一致,但位置必须与数据文件中的字段一一对应,因为此文件较小,所以没有指明这些字段的类型,而如果是要导入大量数据,则指明类型会缩小SQLLDR命令执行的时间,提高效率、
e)第六行表示数据开始(如果在INFILE 后面指明了数据文件名,则这一语句就没有意义了)
从第七行还是就是要导入的数据了,也只是在INFILE * 的情况下有效。
3.在指定导入表的时候的参数
在上个例子中参数是TRUNCATE。在这个位置有四个参数:
a)INSERT:向表中插入数据,表必须是空表,否则会报错(INSERT是默认的参数)
b)APPEND:顾名思义,就是向表中追加数据
c)REPLACE:替换表中数据,先做DELETE,再做INSERT
d)TRUNCATE:先做TRUNCATE,在做INSERT
4.执行SQLLDR命令时的一些附加产物
a)日志文件
当执行SQLLDR命令时会产生一个与控制文件同名的.log日志文件,里面的内容很多,包括了行的加载状况(是否失败,如果失败会有一些信息),还有命令运行的时间等(第一次看的时候真是惊讶,居然会有这么详细的日志文件! )
b)失败文件
失败文件的文件名也是与控制文件同名,后缀为.bad,它会记录有哪些数据执行失败了,失败的原因通常是格式不正确,因为失败文件也是数据文件,那么如果将失败文件的文件格式改正确以后,同样可以在INFILE 后面的参数指定为此失败文件(真的是很方便啊!)
c)废弃文件
如果在SQLLDR命令的时候显示的指定废弃文件,那么如果有一些数据由于某些原因没有被加载,会将这些数据放在.dsc废弃文件之中。
先总结这些,欢迎新手一起学习,高手如果发现有不对的地方,也敬请拍砖