为了账号安全,请及时绑定邮箱和手机立即绑定

请问如何使用SQLPLUS对CSV格式化文件进行后台处理?

请问如何使用SQLPLUS对CSV格式化文件进行后台处理?

白衣染霜花 2019-08-02 07:02:35
如何使用SQLPLUS对CSV格式化文件进行后台处理?我想将一些查询提取为CSV输出格式。不幸的是,我不能使用任何花哨的SQL客户端或任何语言来完成它。我必须使用SQLPLUS。我该怎么做?
查看完整描述

3 回答

?
守候你守候我

TA贡献1802条经验 获得超10个赞

您也可以使用以下内容,尽管它确实在字段之间引入了空格。


set colsep ,     -- separate columns with a comma

set pagesize 0   -- No header rows

set trimspool on -- remove trailing blanks

set headsep off  -- this may or may not be useful...depends on your headings.

set linesize X   -- X should be the sum of the column widths

set numw X       -- X should be the length you want for numbers (avoid scientific notation on IDs)


spool myfile.csv


select table_name, tablespace_name 

  from all_tables

 where owner = 'SYS'

   and tablespace_name is not null;

产出如下:


    TABLE_PRIVILEGE_MAP           ,SYSTEM                        

    SYSTEM_PRIVILEGE_MAP          ,SYSTEM                        

    STMT_AUDIT_OPTION_MAP         ,SYSTEM                        

    DUAL                          ,SYSTEM 

...

这将比键入所有字段并将它们与逗号连接起来要简单得多。如果需要,可以使用一个简单的sed脚本来删除逗号前面的空格。


像这样的东西可能有用.(我的sed技能很生疏,所以这可能需要工作)


sed 's/\s+,/,/' myfile.csv 




查看完整回答
反对 回复 2019-08-03
?
万千封印

TA贡献1891条经验 获得超3个赞

我将此命令用于提取维度表(DW)数据的脚本。因此,我使用以下语法:


set colsep '|'

set echo off

set feedback off

set linesize 1000

set pagesize 0

set sqlprompt ''

set trimspool on

set headsep off


spool output.dat


select '|', <table>.*, '|'

  from <table>

where <conditions>


spool off

而且起作用了。我不使用sed格式化输出文件。




查看完整回答
反对 回复 2019-08-03
?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

我看到了一个类似的问题.。

我需要从SQLPLUS对CSV文件进行后台处理,但是输出有250列。

为了避免烦人的SQLPLUS输出格式,我做了什么:

set linesize 9999set pagesize 50000spool myfile.csvselect xfrom(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 xfrom (  
      ...  here is the "core" select
     ));spool off

问题是你会失去列头名.。

您可以添加以下内容:

set heading offspool myfile.csvselect 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 xfrom(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 xfrom (  
      ...  here is the "core" select
     ));spool off

我知道这有点硬,但对我来说很管用.



查看完整回答
反对 回复 2019-08-03
  • 3 回答
  • 0 关注
  • 492 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信