sql*loader用法小结

sql*loader用法小结

最近在项目中遇到将clob类型的大对象导入到数据库中(oracle),平时只是拷贝一下就行了。可是遇到clob就行了,问了几个同事都没有办法,最后问了组长和后台比较牛的人她们分别告诉我用pl/sql和toad导入的方法,可是导入时还有问题,后来向华为研发要了一个sql*loader脚本,看了一下挺简单的,结果研发给的可以导进去,本地布署的却不行,最后确定是版本有问题,然后下载了一个最新版本问题搞定了。可是在这个过程中觉得应该知道sql*loader用法,查看一些资料,并把简单的操作记录给大家,希望能给新手一些帮助。

1.首先我是以大家都有的数据对象和实例进行展示,所以我选择了scott用户的emp为源表数据,先导出为emp.csv文件

导出的方法有多种其中pl/sql和toad比较好,我是以前者进行导出的。(这些方法我也是最近才学会的,哈哈)

由于现在不能进行上传图片,所以我也只能进行说明了。(在pl/sql的查询结果栏上边,有一个export query results,在这个下拉框中选择csv file 就可以把文件保存为csv格式的了)

2.有了导入文件,我们现在需要做的就是写一个配置文件,我在网上找一很多这方面的例子,都大同小异,我找一个我认为比较好的给大家一个参考,希望给大家起到指导作用。(在文章的后面给大家贴出来)

a.我先在scott用户下建一个emp_bak表。

create table scott.emp_bak as

select * from scott.emp t

where 1=2

;

b.查看表结构

create table EMP_BAK
(
  EMPNO    NUMBER(4) not null,
  ENAME    VARCHAR2(10),
  JOB      VARCHAR2(9),
  MGR      NUMBER(4),
  HIREDATE DATE,
  SAL      NUMBER(7,2),
  COMM     NUMBER(7,2),
  DEPTNO   NUMBER(2)
)

c.写控制文件

load data
infile "emp.csv"
badfile 'emp.bad'
discardfile 'emp.dsc'
discardmax 10
append into table "EMP_BAK"
fields terminated by ',' optionally enclosed by '"'
trailing nullcols
(
  EMPNO    ,
  ENAME    ,
  JOB      ,
  MGR      ,
  HIREDATE date'yyyy-mm-dd' ,
  SAL     ,
  COMM     ,
  DEPTNO  
)

将以上内容改成一个emp.ctl文件保存。(date'yyyy-mm-dd' 这个地方要因数据情况而定,我的数据是1980-12-17,所以我用这个,对于不能直接导入的,我们首先在考虑用函数实现)

d.我是把csv文件和ctl文件都在d:/initdata目录下了,于是我在dos分别进行操作

     1.C:/Documents and Settings/jcttest>d:

     2.D:/> cd initdata

     3.D:/initdata>dir 

     4.sqlldr scott/scott@suse emp.ctl

e.其实我们要养成一下查看日志的好习惯,我们要查看日志(这个日志一般是以导入文件名称是一样的,但扩展名不一样,扩展名一般为.log,所以我的就为emp.log)内容如下(当是成功的,对于不同错误,当然也不一样了,哈哈)

SQL*Loader: Release 10.1.0.2.0 - Production on Sat Jan 23 09:21:28 2010

Copyright (c) 1982, 2004, Oracle.  All rights reserved.

Control File:   emp.ctl
Data File:      emp.csv
  Bad File:     emp.bad
  Discard File: emp.dsc
 (Allow 10 discards)

Number to load: ALL
Number to skip: 0
Errors allowed: 50
Bind array:     64 rows, maximum of 256000 bytes
Continuation:    none specified
Path used:      Conventional

Table "EMP_BAK", loaded from every logical record.
Insert option in effect for this table: APPEND
TRAILING NULLCOLS option in effect

   Column Name                  Position   Len  Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
EMPNO                               FIRST     *   ,  O(") CHARACTER           
ENAME                                NEXT     *   ,  O(") CHARACTER           
JOB                                  NEXT     *   ,  O(") CHARACTER           
MGR                                  NEXT     *   ,  O(") CHARACTER           
HIREDATE                             NEXT     *   ,  O(") DATE yyyy-mm-dd     
SAL                                  NEXT     *   ,  O(") CHARACTER           
COMM                                 NEXT     *   ,  O(") CHARACTER           
DEPTNO                               NEXT     *   ,  O(") CHARACTER           

Record 1: Rejected - Error on table "EMP_BAK", column EMPNO.
ORA-01722: invalid number


Table "EMP_BAK":
  14 Rows successfully loaded.
  1 Row not loaded due to data errors.
  0 Rows not loaded because all WHEN clauses were failed.
  0 Rows not loaded because all fields were null.


Space allocated for bind array:                 132096 bytes(64 rows)
Read   buffer bytes: 1048576

Total logical records skipped:          0
Total logical records read:            15
Total logical records rejected:         1
Total logical records discarded:        0

Run began on Sat Jan 23 09:21:28 2010
Run ended on Sat Jan 23 09:21:31 2010

Elapsed time was:     00:00:02.51
CPU time was:         00:00:00.04

 

 

 

你可能感兴趣的:(sql,Date,File,table,character,csv)