Oracle数据库之sqlldr/UTL_FILE快速导入导出Oracle数据demo
小标 2018-12-28 来源 : 阅读 2037 评论 0

摘要:本文主要向大家介绍了Oracle数据库之sqlldr/UTL_FILE快速导入导出Oracle数据demo,通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助。

本文主要向大家介绍了Oracle数据库之sqlldr/UTL_FILE快速导入导出Oracle数据demo,通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助。

本文演示快速sqlldr导入、UTL_FILE导出Oracle表数据实例

表结构如下,演示数据约112万,可自行准备。

create table MemberPointDemo
 2 (
 3 MEMBERID NUMBER(20) not null ,--会员ID
 4   PointType   VARCHAR2(20) not null,--积分类型
 5   Points   VARCHAR2(20),--积分
 6   SDate   VARCHAR2(20) not null,--积分记账日期
 7   Notes   VARCHAR2(60)--备注
 8   
 9 );
10 -- Create/Recreate indexes 
11 create index IDX_MEMBERID on MemberPointDemo (MEMBERID);
12 alter table MemberPointDemo
13   add constraint PK_MEMBER_OUT primary key (MEMBERID, PointType, SDate );

1、快速导入sqlldr

#### *******************最快导入***********************************************/
su - oracle
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"
--装载源表数据
sqlldr dbusrdms/******@DBDMS control=/home/oracle/memberpoint.ctl log=/home/oracle/2017_12_06_162045.log

memberpoint.ctl文件内容:

1 load data
2 infile '/home/oracle/2017_12_06_162045.CSV'
3 into table dbusrdms.MemberPointDemo append
4 fields terminated by ','
5 (MEMBERID, PointType, Points, SDate, Notes)

csv文件格式:

MEMBERID,PointType,Points,SDate,Notes
9281776,1,219,2015-01-01,2015增加
8758055,1,356.00,2015-01-01,2015增加

以上导入112万记录大约在50秒内完成。


 

2、快速导入UTL_FILE.FOPEN

 1 /* ******************************* 导出为csv文件最快******************/
 2 DECLARE
 3   VSFILE UTL_FILE.FILE_TYPE; --定义用于接收文件句柄的类型
 4   V_CNT  NUMBER; --统计每个文件加载行数
 5   V_Date Varchar(20);
 6   --字段列表
 7   MEMBERID NUMBER(20);
 8   PointType   VARCHAR2(20);
 9   Points   VARCHAR2(20);
10   SDate   VARCHAR2(20);
11   Notes   VARCHAR2(60);
12   
13 
14 BEGIN
15   --DBMS_OUTPUT.ENABLE(1000000); -->避免报错ORA-20000: ORU-10027: BUFFER OVERFLOW, LIMIT OF 10000 BYTES
16 
17   --文件命名规则..把表数据时间当做文件命名...
18   V_Date := TO_CHAR(sysdate, 'YYYY_MM_dd_hh24MiSS');
19   --开始打开文件,EXP_DIR为对应的目录
20   VSFILE := UTL_FILE.FOPEN('EXP_DIR', V_Date || '.CSV', 'W');
21 
22   --文件字段标头打印
23   UTL_FILE.PUT_LINE(VSFILE,'MEMBERID,PointType,Points,SDate,Notes');
24   --UTL_FILE.PUT_LINE(VSFILE, '会员ID,积分类型,积分,记账日期,备注');
25 
26   --每个文件加载行数[每次进入循环都赋值为0].排除标头部分
27   V_CNT := 0;
28   --将FOR循环查询的内容
29   FOR SQL_ IN (SELECT MEMBERID, PointType, Points, SDate, Notes FROM MemberPointDemo) LOOP
30     --字段列表
31     MEMBERID := SQL_.MEMBERID;
32     PointType   := SQL_.PointType;
33     Points   := SQL_.Points;
34     SDate   := SQL_.SDate;
35     Notes   := SQL_.Notes;
36     
37   
38     ----UTL_FILE.PUT_LINE 若需要EXCEL格式,需要每字段用逗号隔开,,WINDOWS EXCEL工具打开默认就是EXCEL格式
39     UTL_FILE.PUT_LINE(VSFILE, MEMBERID || ',' || PointType || ',' || Points || ',' || SDate || ',' || Notes );
40     --下面语句可以输出带引号的格式                  
41     --UTL_FILE.PUT_LINE(VSFILE, '"'||MEMBERID || '","' || PointType || '","' || Points || '","' || SDate || '","' || Notes || '"');
42   
43     --计数器,每一条数据都循环+1
44     V_CNT := V_CNT + 1;
45   END LOOP;
46 
47   --打印每个文件 LOAD ROWS
48   DBMS_OUTPUT.PUT_LINE(V_Date || '.CSV文件LOAD ROWS:' || V_CNT);
49 
50   --放在LOOP 后,否则报错 ORA-29282: 文件 ID 无效/ORA-06512: 在 "SYS.UTL_FILE", LINE 878
51   --若不写如下 强制输出缓冲/关闭句柄,可能存在导出数据少于查询条目
52   UTL_FILE.FFLUSH(VSFILE);
53   UTL_FILE.FCLOSE(VSFILE);
54 
55 END;

以上,导出为指定目录下的CSV文件,112万记录,大约14秒。


本文由职坐标整理并发布,希望对同学们学习Oracle有所帮助,更多内容请关注职坐标数据库Oracle数据库频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程