从oracle导出成csv文件

您所在的位置:网站首页 oracle导出上亿数据 从oracle导出成csv文件

从oracle导出成csv文件

#从oracle导出成csv文件| 来源: 网络整理| 查看: 265

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

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

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

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

按提示操作即可。

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

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

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

CREATE OR 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_COLCNT LOOP UTL_FILE.PUT ( L_OUTPUT, L_SEPARATOR || '"' || L_DESCTBL (I ).COL_NAME || '"' ); --输出表字段 DBMS_SQL.DEFINE_COLUMN ( L_THECURSOR, I, L_COLUMNVALUE, 4000 ); L_SEPARATOR := ','; END LOOP ; 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_COLCNT LOOP DBMS_SQL.COLUMN_VALUE ( L_THECURSOR, I, L_COLUMNVALUE ); UTL_FILE.PUT ( L_OUTPUT, L_SEPARATOR || '"' || TRIM ( BOTH ' ' FROM REPLACE (L_COLUMNVALUE, '"', '""') ) || '"' ); L_SEPARATOR := ','; END LOOP ; UTL_FILE.NEW_LINE (L_OUTPUT); END LOOP ; --CLOSE CURSOR DBMS_SQL.CLOSE_CURSOR (L_THECURSOR); --CLOSE FILE UTL_FILE.FCLOSE (L_OUTPUT); EXCEPTION WHEN 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 ','OUT_PATH',''); 效率比较

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

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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3