oracle 导出csv文件

转载 2013年12月01日 21:23:52

转载自:  http://luyongxin88.blog.163.com/blog/static/92558072011619115135111/

自己做了测试,原帖中贴出的存储过程,似乎由于字段间数据没有分割完全,导致在导出的csv文件中,字段和数据没有对应上(我测试的结果是:会有两列数据挤到一列中去)。

修改了存储过程后(代码中红色标示出的语句),完全分割了各字段的数据,实现了从oracle中把数据导出csv文件。

要实现这一功能,首先需要了解oracle的utl_file,directory知识。

普通用户还需要执行以下步骤:

1、以管理员用户登录,授给指定普通用户create directory权限,命令如下:

      GRANT   CREATE ANY DIRECTORY to bloodeyed;

      授权给指定用户执行utl_file,命令如下:

       GRANT    EXECUTE    ON    utl_file    TO    bloodeyed;

2、普通用户登录,执行命令:

      CREATE OR  REPLACE DIRECTORY  MYDIR AS 'd:\';

3、编写存储过程。

     以下仅供参考:

    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_SEPARATOR1 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;

 

4、测试存储过程,将查询结果导出到example.csv中:

declare

 fhandle utl_file.file_type;

 begin

    sql_to_csv('select * from newstable ','MYDIR','example.csv');

 end;
 

 

举报

相关文章推荐

oracle导出多CSV文件的靠谱的

oracle导出多CSV文件的问题 ---------------------------------------------------------------------- ...

oracle sqlplus 导出csv文件

spool.sql set colsep , set feedback off set heading off set trimout on spool D:\DBoracle\lfc.csv ...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

Oracle将数据导出到CSV文件

工作中有需要将线上数据导出到excel给客户分析/查看的情况,如下是方法介绍情况: utl_file读写文件包 ,1分钟导出的数据量 大概是300万 适用于大量导出时 spool 循环打印 ,适用小型...

oracle sqlplus 导出csv文件

spool.sql [html] view plaincopyprint? set colsep , set feedback off set heading off set ...
  • hzhsan
  • hzhsan
  • 2014-04-24 08:55
  • 5011

使用SQL*Loader将CSV文件数据导入ORACLE数据表

使用SQL*Loader将CSV文件数据导入ORACLE数据表 LuckySYM 1. 环境条件与操作目标 (1) Oracle中存在一个Employee表,表中包含4个字段: ...

DbHelper 操作SQL Server、Oracle、Access、Excel、CSV五种数据源+ Xml文件读写

编译环境:VS2008+Win7 数据源: SQL Server 2005,Oracle 10g,Access 2003,Excel 2003,CSV,Xml 功能: 查看所有数据:读取数...

向oracle中导入*.csv文件

向oracle中导入*.csv文件 1.什么是*.csv,如何得到? 里面存放的是数据表.每行代表数据库表格的一行, 每行中,每两个数据中间由逗号","分割. *.csv可...

(sqlldr)将xx.csv文件导入oracle数据库

1、在数据库中创建表,表的字段要与XX.CSV文件的列数一致。(只是简单的直接导入数据) create table T_ORDER_DETAIL ( oid NUMBER, pro...

Oracle自带 SQL developer 导入*.csv和*.xls格式的文件

在项目过程中,遇到要将*.csv格式的文件导入到oracle数据库中,使用的工具是oracle自带的SQL developer,数据库版本为oracle 11g。第一步将*.csv格式的文件用记事本打...

将csv文件导入oracle中

本文介绍了四种方法,实现将一个csv文件(文本以逗号分割)导入oracle数据库表。 1 复制、粘贴 将csv文件以excel打开,删除题头行,只保留数据,在第一列前面加空白列,列的顺序与...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)