How do I spool to a CSV formatted file using SQLPLUS?

后端 未结 16 941
执笔经年
执笔经年 2020-11-22 15:40

I want to extract some queries to a CSV output format. Unfortunately, I can\'t use any fancy SQL client or any language to do it. I must use SQLPLUS.

How do I do it?

相关标签:
16条回答
  • 2020-11-22 16:18

    I know this is an old thread, however I noticed that no one mentioned the underline option, which can remove the underlines under the column headings.

    set pagesize 50000--50k is the max as of 12c
    set linesize 10000   
    set trimspool on  --remove trailing blankspaces
    set underline off --remove the dashes/underlines under the col headers
    set colsep ~
    
    select * from DW_TMC_PROJECT_VW;
    
    0 讨论(0)
  • 2020-11-22 16:19

    I have once written a little SQL*Plus script that uses dbms_sql and dbms_output to create a csv (actually an ssv). You can find it on my githup repository.

    0 讨论(0)
  • 2020-11-22 16:19
    spool D:\test.txt
    
        select * from emp
        
        spool off
    
    0 讨论(0)
  • 2020-11-22 16:19

    You could use csv hint. See the following example:

    select /*csv*/ table_name, tablespace_name
    from all_tables
    where owner = 'SYS'
    and tablespace_name is not null;
    
    0 讨论(0)
  • 2020-11-22 16:22

    I see a similar problem...

    I need to spool CSV file from SQLPLUS, but the output has 250 columns.

    What I did to avoid annoying SQLPLUS output formatting:

    set linesize 9999
    set pagesize 50000
    spool myfile.csv
    select x
    from
    (
    select col1||';'||col2||';'||col3||';'||col4||';'||col5||';'||col6||';'||col7||';'||col8||';'||col9||';'||col10||';'||col11||';'||col12||';'||col13||';'||col14||';'||col15||';'||col16||';'||col17||';'||col18||';'||col19||';'||col20||';'||col21||';'||col22||';'||col23||';'||col24||';'||col25||';'||col26||';'||col27||';'||col28||';'||col29||';'||col30 as x
    from (  
          ...  here is the "core" select
         )
    );
    spool off
    

    the problem is you will lose column header names...

    you can add this:

    set heading off
    spool myfile.csv
    select col1_name||';'||col2_name||';'||col3_name||';'||col4_name||';'||col5_name||';'||col6_name||';'||col7_name||';'||col8_name||';'||col9_name||';'||col10_name||';'||col11_name||';'||col12_name||';'||col13_name||';'||col14_name||';'||col15_name||';'||col16_name||';'||col17_name||';'||col18_name||';'||col19_name||';'||col20_name||';'||col21_name||';'||col22_name||';'||col23_name||';'||col24_name||';'||col25_name||';'||col26_name||';'||col27_name||';'||col28_name||';'||col29_name||';'||col30_name from dual;
    
    select x
    from
    (
    select col1||';'||col2||';'||col3||';'||col4||';'||col5||';'||col6||';'||col7||';'||col8||';'||col9||';'||col10||';'||col11||';'||col12||';'||col13||';'||col14||';'||col15||';'||col16||';'||col17||';'||col18||';'||col19||';'||col20||';'||col21||';'||col22||';'||col23||';'||col24||';'||col25||';'||col26||';'||col27||';'||col28||';'||col29||';'||col30 as x
    from (  
          ...  here is the "core" select
         )
    );
    spool off
    

    I know it`s kinda hardcore, but it works for me...

    0 讨论(0)
  • 2020-11-22 16:22

    You can explicitly format the query to produce a delimited string with something along the lines of:

    select '"'||foo||'","'||bar||'"'
      from tab
    

    And set up the output options as appropriate. As an option, the COLSEP variable on SQLPlus will let you produce delimited files without having to explicitly generate a string with the fields concatenated together. However, you will have to put quotes around strings on any columns that might contain embedded comma characters.

    0 讨论(0)
提交回复
热议问题