1.什么是*.csv,如何得到? 里面存放的是数据表.每行代表数据库表格的一行, 每行中,每两个数据中间由逗号","分割. *.csv可以通过"将excel文件另存为*.csv"得到. 2.如何将*.csv格式的数据导入oracle数据库? 举例来说: test.csv文件中存放以下数据. a1,b1 a2,b2 存放路径为: d:\test.csv 准备将其存放到oracle数据库中. a.首先,则需要新建表(栏位数量和类型要和需要导入的一致) create table test(A char,B char); b.新建test.ctl文件 用记事本编辑写入: load data infile ‘d:\test.csv’ into table “test” fields terminated by ‘,’ (A,B) c.打开cmd命令行界面 输入: sqlldr userid=user/password@database control=d:\test.ctl log=d:\test.log 回车 user/password@database:为账号和密码以及数据库名称. 以上的介绍比较简单. http://www.blogjava.net/Unmi/archive/2009/01/05/249956.html 里面的介绍比较详细,我转到这里: 在 Oracle 数据库中,我们通常在不同数据库的表间记录进行复制或迁移时会用以下几种方法:
1
alter
table
B nologging;
2 3 insert /* +APPEND */ into B(c1,c2) values (x,xx); 4 insert /* +APPEND */ into B select * from A @dblink where .....; 5
insert
into
users
values
(
1
,
'
Unmi
'
,
3
,sysdate);
insert into users values ( 2 , NULL , 5 ,to_date( ' 2008-10-15 ' , ' YYYY-MM-DD ' )); insert into users values ( 3 , ' 隔叶黄莺 ' , 8 ,to_date( ' 2009-01-02 ' , ' YYYY-MM-DD ' )); insert into users values ( 4 , ' Kypfos ' , NULL , NULL ); insert into users values ( 5 , ' 不知秋 ' , 1 ,to_date( ' 2008-12-23 ' , ' YYYY-MM-DD ' ));
第二种方式: 使用一个控制文件(作为模板) 和一个数据文件
1) 建立数据文件,我们这里用 PL/SQL Developer 导出表 users 的记录为 users_data.csv 文件,内容如下:
" ","
USER_ID
","
USER_NAME
","LOGIN_TIMES","LAST_LOGIN"
" 1 "," 1 ","Unmi"," 3 "," 2009 - 1 - 5 20 : 34 : 44 " " 2 "," 2 ",""," 5 "," 2008 - 10 - 15 " " 3 "," 3 ","隔叶黄莺"," 8 "," 2009 - 1 - 2 " " 4 "," 4 ","Kypfos","","" " 5 "," 5 ","不知秋"," 1 "," 2008 - 12 - 23 "
2) 建立一个控制文件 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 sqlldr dbuser/dbpass@dbservice control=users.ctl 比如,在控制台会显示这样的信息: C:\>sqlldr dbuser/dbpass@dbservice control=users.ctl SQL*Loader: Release 9.2.0.1.0 - Production on 星期三 1月 7 22:26:25 2009 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. 达到提交点,逻辑记录计数4 1) ROWS 的默认值为 64,你可以根据实际指定更合适的 ROWS 参数来指定每次提交记录数。(体验过在 PL/SQL Developer 中一次执行几条条以上的 insert 语句的情形吗?) 2)常规导入可以通过使用 INSERT语句来导入数据。Direct导入可以跳过数据库的相关逻辑(DIRECT=TRUE),而直接将数据导入到数据文件中,可以提高导入数据的性能。当然,在很多情况下,不能使用此参数(如果主键重复的话会使索引的状态变成UNUSABLE!)。 3) 通过指定 UNRECOVERABLE选项,可以关闭数据库的日志(是否要 alter table table1 nologging 呢?)。这个选项只能和 direct 一起使用。 4) 对于超大数据文件的导入就要用并发操作了,即同时运行多个导入任务. sqlldr userid=/ control=result1.ctl direct=true parallel=true 当加载大量数据时(大约超过10GB),最好抑制日志的产生:
|
向oracle中导入*.csv文件
最新推荐文章于 2020-05-29 20:50:07 发布
向oracle中导入*.csv文件