请教,sqlload将数据库的表(table1)导出成CSV文件,急。

解决方案 »

  1.   

    http://space.itpub.net/559237/viewspace-557383
      

  2.   

    sql*loader不能从数据库导出数据,
    虽然可以通过外部表的oracle_datapump方式可以导出数据,但是是二进制格式。
    所以,要将数据生成CSV,可以
    1、使用pl/sql developer,查询出结果,在结果表格上单击右键,然后Export Results -> csv(Toad也可以)
    2、使用sqlplus执行脚本,例如,一个脚本样例,expcsv.sqlset heading off
    set termout off
    set feedback off
    set pagesize 0
    set trimsout on
    set trimspool on
    spool table1.csv
    select col1||','||col2||','||col3 from table1;
    spool off
      

  3.   

    谢谢两位的回答,我现在用sqlplus执行SQL脚本,可以导出CSV文件,只是导出的内容排版很乱,
    select col1||','||col2||','||col3 from table1;我也是这么拼的,显示的数据不好看哦
      

  4.   

    再弱弱的问下
    select inv_no||','||term_id||','||barcode||','||stock||','||shelf||','||taken_by||',''''||date||'''','||time||','||stk||','||dtype from chkdisp_csv;  这里的date是关键字,应该怎么处理哦
      

  5.   

    date是保留字,不能做为列名的
    难道你的表中有名为date的列?
      

  6.   

    是的,因为是要求要用date表示字段,所以在创建表的时候"Date"处理了的。现在表中的字段就是date
      

  7.   

    晕,那就是加双引号了"
    select inv_no||','||term_id||','||barcode||','||stock||','||shelf||','||taken_by||',"'||date||'",'||time||','||stk||','||dtype from chkdisp_csv; 
      

  8.   

    双引号位置错了,这样
    select inv_no||','||term_id||','||barcode||','||stock||','||shelf||','||taken_by||','||"date"||','||time||','||stk||','||dtype from chkdisp_csv; 
      

  9.   

    select inv_no || ',' || term_id || ',' || barcode || ',' || stock || ',' ||
             shelf || ',' || taken_by || ',' || "DATE" ||
             ',' || time || ',' || stk || ',' || dtype
        from chkdisp_csv ; 谢谢楼下指教。。这个问题OK
      

  10.   

    我导出来CSV第一行是空着的,我想在空的这一行加标题,应该怎么写呢
    spool e:\upload_file.csv; 
    set echo off;
    set feedback off;
    set heading off;
    set pagesize 0;
    set pages 500;
    set linesize 85;
    set trimout off;
    set trimspool on;
    set termout off;
    set trims on
    select inv_no || ',' || term_id || ',' || barcode || ',' || stock || ',' ||
             shelf || ',' || taken_by || ',' || "DATE" ||
             ',' || time || ',' || stk || ',' || dtype
        from chkdisp_csv ;
    spool off;
    exit;
      

  11.   

    select '我的标题' from dual 
    union all
    select inv_no || ',' || term_id || ',' || barcode || ',' || stock || ',' ||
      shelf || ',' || taken_by || ',' || "DATE" ||
      ',' || time || ',' || stk || ',' || dtype
      from chkdisp_csv ;
      

  12.   

    select 'inv_no','term_id','barcode','stock','shelf','taken_by ','DATE','time','stk','dtype' from dual
    union all
    select inv_no || ',' || term_id || ',' || barcode || ',' || stock || ',' ||
             shelf || ',' || taken_by || ',' || "DATE" ||
             ',' || time || ',' || stk || ',' || dtype
        from chkdisp_csv ;
    这样写吗?报表说ORA-01789: 查询块具有不正确的结果列数
      

  13.   

    你的第二个sql是把所有字段拼成一个字段了,只有一列
    而你的第一个sql却有好几列,怎么union?
    楼主还是要多思考啊
      

  14.   

    呵呵,楼上说的是,已经调好了。
    select 'inv_no' || ',' || 'term_id' || ',' || 'barcode' || ',' || 'stock' || ',' ||
           'shelf' || ',' || 'taken_by ' || ',' || 'DATE' || ',' || 'time' || ',' ||
           'stk' || ',' || 'dtype'
      from dual
    union all
    select inv_no || ',' || term_id || ',' || barcode || ',' || stock || ',' ||
           shelf || ',' || taken_by || ',' || "DATE" || ',' || time || ',' || stk || ',' ||
           dtype
      from chkdisp_csv;  只是奇怪,怎么CSV文件一直都空了第一行呢?是设置了什么吗??
      

  15.   

    sql内容:
    spool d:/table1.csv
    select 'inv_no' || ',' || 'term_id' || ',' || 'barcode' || ',' || 'stock' || ',' ||
           'shelf' || ',' || 'taken_by ' || ',' || 'DATE' || ',' || 'time' || ',' ||
           'stk' || ',' || 'dtype'
      from dual
    union
    select g.stuname || ',' || g.subject || ',' || g.grade
      from mw_app.mwt_gradeinfo g;
    spool off
    csv中的内容:
    inv_no term_id barcode stock shelf taken_by  DATE time stk dtype
    李光明 高代 80
    宋光辉 大学物理 80
    没有空行啊
    估计是设置问题
      

  16.   

    谢谢各位的帮助,最后一个问题已经OK
    spool D:\修改chkdisp_v10.2(++新CSV)\chkdisp_v10.2\chkdisp_v10.2\chkdisp\src\upload_file.csv; 
    set echo off;
    set feedback off;
    set newp none ;
    set heading off;
    set pagesize 0;
    set pages 500;
    set linesize 85;
    set trimout off;
    set trimspool on;
    set termout off;
    set trims on
    select 'inv_no' || ',' || 'term_id' || ',' || 'barcode' || ',' || 'stock' || ',' ||
           'shelf' || ',' || 'taken_by ' || ',' || 'DATE' || ',' || 'time' || ',' ||
           'stk' || ',' || 'dtype'
      from dual
    union all
    select inv_no || ',' || term_id || ',' || barcode || ',' || stock || ',' ||
           shelf || ',' || taken_by || ',' || "DATE" || ',' || time || ',' || stk || ',' ||
           dtype
      from chkdisp_csv;
    spool off;
    exit;
    加了一个set newp none ;已经没有空格。也希望这些问题能够帮助更多的朋友。
      

  17.   

    。额,还是再问一个,能不能把CSV中的数据居中啊。