从oracle导出成csv文件
从oracle导出csv文件主要有两种方法
方法1、使用oracle server developer自带的功能
在数据库中找到想要导出的表,右键选择导出。去掉勾选的导出DDL,把格式改成csv,选择相应的编码方式
下一步之后,还可以添加where子句。
按提示操作即可。
方法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),我们将第一时间核实后及时予以删除。