我想将一些查询提取为CSV输出格式。不幸的是,我不能使用任何花哨的SQL客户机或任何语言来做这件事。我必须使用SQLPLUS。
我该怎么做呢?
发布于 2017-02-15 05:55:17
如果你使用的是12.2,你可以简单地说
set markup csv on
spool myfile.csv
发布于 2009-03-17 15:23:33
您也可以使用下面的代码,尽管它确实在字段之间引入了空格。
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
发布于 2010-11-12 23:29:51
我将此命令用于提取维度表(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来格式化输出文件。
https://stackoverflow.com/questions/643137
复制相似问题