sqlldr能导入mysql_Oracle数据库之sqlldr/UTL_FILE快速导入导出Oracle数据demo

本文主要向大家介绍了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数据库频道!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值