当前位置: 首页 >数据库 > 从oracle导出成csv文件

从oracle导出成csv文件

从oracle导出csv文件主要有两种方法

方法1、使用oracle server developer自带的功能

在数据库中找到想要导出的表,右键选择导出。去掉勾选的导出DDL,把格式改成csv,选择相应的编码方式

从oracle导出成csv文件 _ JavaClub全栈架构师技术笔记

下一步之后,还可以添加where子句。

从oracle导出成csv文件 _ JavaClub全栈架构师技术笔记

按提示操作即可。

方法2、使用oracle的内建包UTL_FILE

utl_file读写文件包 ,每分钟大约处理百万行。适用于大量导出时。

1)新建一个sql_to_csv的存储过程。

CREATEOR REPLACE PROCEDURE SQL_TO_CSV (	P_QUERY IN VARCHAR2,-- PLSQL文  	P_DIR IN VARCHAR2,-- 导出的文件放置目录  	P_FILENAME IN VARCHAR2 -- CSV名  ) IS L_OUTPUT UTL_FILE.FILE_TYPE;L_THECURSOR INTEGER DEFAULT DBMS_SQL.OPEN_CURSOR;L_COLUMNVALUE VARCHAR2 (4000);L_STATUS INTEGER;L_COLCNT NUMBER := 0;L_SEPARATOR VARCHAR2 (1);L_DESCTBL DBMS_SQL.DESC_TAB;P_MAX_LINESIZE NUMBER := 32000;BEGIN	--OPEN FILE  	L_OUTPUT := UTL_FILE.FOPEN (		P_DIR,		P_FILENAME,		'W',		P_MAX_LINESIZE	);--DEFINE DATE FORMAT  EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_DATE_FORMAT=''YYYY-MM-DD HH24:MI:SS''';--OPEN CURSOR  DBMS_SQL.PARSE (	L_THECURSOR,	P_QUERY,	DBMS_SQL.NATIVE);DBMS_SQL.DESCRIBE_COLUMNS (	L_THECURSOR,	L_COLCNT,	L_DESCTBL);--DUMP TABLE COLUMN NAME  FOR I IN 1 ..L_COLCNTLOOP	UTL_FILE.PUT (		L_OUTPUT,		L_SEPARATOR || '"' || L_DESCTBL (I ).COL_NAME || '"'	);--输出表字段  DBMS_SQL.DEFINE_COLUMN (	L_THECURSOR,	I,	L_COLUMNVALUE,	4000);L_SEPARATOR := ',';ENDLOOP;UTL_FILE.NEW_LINE (L_OUTPUT);--输出表字段  --EXECUTE THE QUERY STATEMENT  L_STATUS := DBMS_SQL. EXECUTE (L_THECURSOR);--DUMP TABLE COLUMN VALUE  WHILE (	DBMS_SQL.FETCH_ROWS (L_THECURSOR) > 0)LOOP	L_SEPARATOR := '';FOR I IN 1 ..L_COLCNTLOOP	DBMS_SQL.COLUMN_VALUE (		L_THECURSOR,		I,		L_COLUMNVALUE	);UTL_FILE.PUT (	L_OUTPUT,	L_SEPARATOR || '"' || TRIM (		BOTH ' '		FROM			REPLACE (L_COLUMNVALUE, '"', '""')	) || '"');L_SEPARATOR := ',';ENDLOOP;UTL_FILE.NEW_LINE (L_OUTPUT);ENDLOOP;--CLOSE CURSOR  DBMS_SQL.CLOSE_CURSOR (L_THECURSOR);--CLOSE FILE  UTL_FILE.FCLOSE (L_OUTPUT);EXCEPTIONWHEN OTHERS THEN	RAISE;END;/

2)创建导出路径

create or replace directory OUT_PATH as 'D:\out_path';  

注意:这步只是在oracle sql developer中定义了导出路径,如果路径不存在,并不会自动生成,需要手动去新建!

3) 执行导出命令

EXEC sql_to_csv('select * from <tablename>','OUT_PATH','<filename>'); 

效率比较

第一个方法比较简单,但是导出速度上较慢,导出2亿多条的70GB数据大约需要2天半。

第二个方法相对需要一些设置,速度较快,导出2亿多条的70GB数据大约为20小时。(效率值都是我尝试下来的情况,不同环境可能会有所不同)

作者:cliviabao
来源链接:https://blog.csdn.net/cliviabao/article/details/80663985

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。





本文链接:https://www.javaclub.cn/database/112126.html

标签:Oracle
分享给朋友:

“从oracle导出成csv文件” 的相关文章

Linux安装MySQL(超详细) 2022年05月16日 21:54:54
mysql数据查询——复杂查询 2022年06月09日 23:08:26
MYSQL根据日期查询 2022年06月11日 21:03:52
Mysql查询用户最后一次登陆时间 2022年06月12日 13:54:22
MYSQL查询返回JSON格式的字符串 2022年06月12日 23:10:27