【正确答案】有多种方式可以将文本文件的数据导入到数据库中,例如,利用PLSQL Developer软件进行复制粘贴,利用外部表,利用SQL*Loader等方式。至于Excel中的数据可以另存为csv文件(csv文件其实是逗号分隔的文本文件),然后导入到数据库中。
下面简单介绍一下SQL*Loader的使用方式。
SQL*Loader是一个Oracle工具,能够将数据从外部数据文件装载到数据库中。SQL*Loader必须包含一个控制文件,该控制文件是SQL*Loader的中枢核心,控制文件能够控制外部数据文件中的数据如何映射到Oracle的表和列。通常与SPOOL导出文本数据方法配合使用。SQL*Loader能够接收多种不同格式的数据文件。文件可以存储在磁盘或磁带上,或记录本身可以被嵌套到控制文件中。记录格式可以是定长的或变长的,定长记录是指这样的记录:每条记录具有相同的固定长度,并且每条记录中的数据域也具有相同的固定长度、数据类型和位置。
SQL*Loader的数据导入比较专业,有各种参数及选项可供选择,经常是作为数据仓库中大型数据的导入方法选择。
SQL*Loader的优点:
1)可将导入命令写入BAT文件直接批量处理。
2)导入处理比较专业,提供各种参数选择。
3)无需操作Oracle所在服务器。
SQL*Loader也有缺点,例如,Excel文件需要另存为txt或csv格式才能导入到数据库中。
总的来说这种方法是最值得采用的,可以自动建立操作系统的批处理文件执行SQL*Loader命令,将数据导入原始接收表,并在数据库中设置触发器进行精细操作。
SQL*Loader有两种使用方法:
1)只使用一个控制文件,在这个控制文件中包含数据。
2)使用一个控制文件和一个数据文件。
SQL*Loader工具使用的命令为sqlldr,其常用参数的含义见表1。
下面给出SQL*Loader控制文件的一个示例:

其中,CHARACTERSET指定文件的编码格式,infile指定导入的文件。
接下来就是执行导入命令了,如下:

当要加载的数据文件比较大的时候该如何提高SQL*Loader的性能呢?可以从以下几个方面考虑:
1)ROWS的默认值为64,可以根据需要指定更合适的ROWS参数来指定每次提交记录数。
2)米用DIRECT=TRUE导入可以跳过数据库的相关逻辑,直接将数据导入到数据文件中,可以提高导入数据的性能。
3)通过指定UNRECOVERABLE选项,可以写少量的日志,从而提高数据加载的性能。不过,推荐在加载完成后立即对数据库或至少对表空间备份。
当加载大量数据时,最好抑制日志的产生:

将表修改为NOLOGGING,可以只产生少量的Redo日志,从而提高导入效率。在CONTROL文件中的load data前边加一行:UNRECOVERABLE,此选项必须要与DIRECT共同使用。对于超大数据文件的导入就要用并发操作了,即同时运行多个导入任务:

表2给出在使用SQL*Loader的过程中,一些常用的需求实现方法。
表3给出了在使用SQL*Loader的过程中,常遇到的错误及其解决方法。
【答案解析】