数据库里有张表,100个字段,记录有170W条,现在需要导出成为CSV文件格式,有什么好方法吗?我导出来的文件,然后想放入数据挖掘软件里,读取的时候字段和数据不匹配,有什么方法可以解决吗?请教高手!

解决方案 »

  1.   

    我试过用sql/pl连接db,之后把整个数据都ctrl+a  ---> ctrl+c --->ctrl+v 到excel之后另存为xx.csv。
    还没发现用终端直接导出csv文件的。
      

  2.   

    用oracle的客户端工具toad查询后导出,另存为excel文件,再保存成csv类型就可以了吧
      

  3.   

    sql/pl右边中间一点,有个导出,可以选择导成csv的
      

  4.   

    在sql windows右边的上下箭头下面的那个圆圆的
      

  5.   

    http://topic.csdn.net/t/20051101/10/4363286.html
      

  6.   

    用PL SQL DEVELOP工具,查询到结果,就有直接导出到CSV的按钮去试试吧
      

  7.   

    170W条记录,我不知道EXCEL能否支持
      

  8.   

    100个字段???设计的也太不合理了吧   TOAD可以实现导成CSV文件
      

  9.   

    我用 zqf2010(一鸣)  的方法试过,不过另存就只存到了一半。时间问题,我没那么多时间,需要一个快捷的方法。
    sunnyrain(旭雨) 说的我试过,可是我机器顶多打开14W条记录,然后就没空间了。不能全部显示在PL/SQL里。我知道你说的这个方法可行,可是数据量太大了。
    170W记录EXCEL打不开的,它只能开6W多,我用的是UE打开。100个字段是因为那张表是宽表的衍生结果表。需要做分析的。
    各位还有没有其他更好的方法啊?我说的是快捷一点的。拜托啦
      

  10.   

    vivianfdlpw() ,你给的那个地址里说的方法我也试过了,也不行,数据对不齐。而且还莫名其妙的多出了“--------”这个符号,导出一行就多一个这样的符号,而且也是占一行,所以数据对不齐。
      

  11.   

    数据挖掘吗?我们是用脚本完成导出的,然后再使用工具导入到另一个库里边,如果是oracle-oracle的话,使用DATABASE LINK就可以做成导出。如果一定要导出文本,使用大数据量导入后使用excel查看数据是成问题
    你可以看一下脚本
    这是一部分
    echo "C_TIMATE、C_TIMATELIST增量数据开始抽取"`date`>>$etllog/$workdate/Exp__CtimateAll_Add_D.logsqlplus -s $lpusr/$lppwd@$lpsid <<EOF >/dev/null--set colsep ' || ';
    set echo off;
    set feedback off; --禁止显示最后一行的计数反馈信息
    set heading off;  --禁止输出列标题
    set pagesize 0;   --设置显示多少行打印一次列名
    set linesize 1000;
    set numwidth 12;
    set termout off;
    set trimout on;   --清空多余的空格
    set trimspool on;
    set newpage none; --没有翻页,输出的文件没有空行
    spool $ftpin/$workdate/Exp__CtimateAll.EXF;SELECT a.timateno||' || '||
           a.seno||' || '||
           a.itcode||' || '||
           b.serialno||' || '||
           b.timateamount||' || '||
           b.itemcode||' || '||
           b.item||' || '||
           to_char(a.makedate,'YYYY-MM-DD HH24:MI:SS') ||' ||'
    FROM   c_timate a,c_timatelist b 
    WHERE  a.timateno=b.timateno
           AND a.makedate>=to_date(to_char($workdate)||'000000','yyyymmddHH24miss');
           AND a.makedate<=to_date(to_char($enddate)||'235959','yyyymmddHH24miss');
    spool off;
    exit
    EOF
      

  12.   

    zhzhs007(统一猪) 
    你写的这个是前面 vivianfdlpw()   给的地址里的SPOOL 方法,我也试过了,可是就是无端端的多出了“-----”这个东东,前面我讲过了,每导出一行,就多出一行这个。让我郁闷着呢
      

  13.   

    现在我用SPOOL方法导出的CSV文件数据对不齐,哪位高手可以帮忙解决啊?万分感谢啊!!急急急
      

  14.   

    问题是一些参数你得设置
    比如这个 
    set heading off
      

  15.   

    各位老兄,小弟用各位刚才说的方法试了,正在进行中,但是我这边数据量实在是太大了。用    zhzhs007(统一猪)   的方法可行,现在想求教各位有没有提高效率的方法啊。1秒才20行左右,这样我100多W的数据,要崩溃了啊:(
    下面是我在PL/SQL的执行代码,就是太慢啊……spool c:\table_name.csv;
    set heading off;  --禁止输出列标题
    select col1||','||col2||','||col3 from table_name;
    spool off;请教各位有没有提高效率的方法
      

  16.   

    按理100来万的数据量不大啊,就算笔记本上,用spool也不至于1秒才20行啊。spool时其实大量时间是花在在屏幕上显示结果了,这时用set termout off就可以关闭屏幕显示。
    注意:set termout off 只在脚本中起作用对于你的问题,我的建议是:
    1.建一脚本 exp.sql
    set heading off
    set termout off
    spool c:\table_name.csv
    select 
    col1||','||col2||','||col3 from table_name;
    spool off2.在SQL plus 里执行脚本
    SQL> @exp.sql相信速度会有一定提高。我们原来几亿条的数据也这么导出,应该没什么问题。
      

  17.   

    补充一下:
    如果这种导出是经常性的外,最好还是用一些专门的ETL工具,比如直接用于数据抽取的DataStage等。
      

  18.   

    谢谢各位了。速度是快了很多。还想请教一下,对于Oracle的命令,哪里有API吗?拿来学习一下。最好是中文形式的,E文有点头痛啊~~
      

  19.   

    可以试试用一下,UTL_FILE 包:
    我试的是一张128W记录的表.只有4个字段.只用了109秒..
    主要实现思路:
        1、声明一个纪录,用来存储导出的数据;
        2、使用游标取数据到记录中;
        3、使用utl_file将纪录中的数据写入文本文件;
        4、循环执行步骤2和3,完成数据的导出。