浏览 2900 次
锁定老帖子 主题:sqlldr装载数据
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-11-29
D:\> sqlldr mcp/mcp_asia D:\mcp_operator.ctl mcp_operator.bad silent=header,feedback [说明] silent=header,feedback 隐藏数据载入过程中的提示信息 其中,控制文件mcp_operator.ctl的内容如下: Load data infile 'D:\mcp_operator.AVL' into table mcp.int_03001_20100616 append fields terminated by ',' ( op_id,op_name,login_name,phone,op_status,lock_status,org_id,region_code,county_code ) [说明] infile 要载入的数据文件完整路径 into table mcp.int_03001_20100616 向表中插入数据 fields terminated by ',' 字段分隔符为逗号 (op_id,op_name,...) 定义字段顺序 row 多少条记录提交一次,默认为64 数据载入方式: a、insert,为缺省方式,在数据装载开始时要求表为空 b、append,在表中追加新记录 c、replace,删除旧记录,替换成新装载的记录 d、truncate,同上 表字段无对应值,允许其为空: TRAILING NULLCOLS 参考:http://www.cnblogs.com/twyth/archive/2009/08/16/1547141.html 1) 把 users_data.cvs 中的内容补到 users.ctl 中,并以 BEGINDATA 连接,还要把 INFILE "users_data.csv" 改为 INFILE *。同时为了更大化的说明问题,把数据处理了一下。此时,完整的 users.ctl 文件内容是: OPTIONS (skip=1,rows=128) -- sqlldr 命令显示的选项可以写到这里边来,skip=1 用来跳过数据中的第一行 LOAD DATA INFILE * -- 因为数据同控制文件在一起,所以用 * 表示 append -- 这里用了 append 来操作,在表 users 中附加记录 INTO TABLE users when LOGIN_TIMES'8' -- 还可以用 when 子句选择导入符合条件的记录 Fields terminated by "," trailing nullcols ( virtual_column FILLER, --跳过由 PL/SQL Developer 生成的第一列序号 user_id "user_seq.nextval", --这一列直接取序列的下一值,而不用数据中提供的值 user_name "'Hi '||upper(:user_name)",--还能用SQL函数或运算对数据进行加工处理 login_times terminated by ",", NULLIF(login_times='NULL') --可为列单独指定分隔符 last_login DATE "YYYY-MM-DD HH24:MI:SS" NULLIF (last_login="NULL") --当字段为"NULL"时就是 NULL ) BEGINDATA --数据从这里开始,USER_ID,USER_NAME,LOGIN_TIMES,LAST_LOGIN 1,1,Unmi,3,2009-1-5 20:34 2,2,Fantasia,5,2008-10-15 3,3,隔叶黄莺,8,2009-1-2 4,4,Kypfos,NULL,NULL 5,5,不知秋,1,2008-12-23 ====================================================================== 日期类型: op_time date "YYYY-MM-DD" timestamp类型: so_date timestamp "YYYY-MM-DD HH24:MI:SS.ff" 使用Oracle函数: so_nbr "TRIM(:so_nbr)" 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2012-11-30
总结的不错啊。我刚好用到它。
不过,我在字符集上花了点功夫。 楼主在date等字段处理上写的很好。 |
|
返回顶楼 | |