我目前正在编写脚本,以将表数据输出到CSV文件,以便可以将其提取到另一个平台中。我宁愿使用set markup CSV on quote on;
SQL选项来生成我的输出文件。因为它使脚本更加简洁,而且编写起来非常简单。
但是,问题是,无论我如何努力,我似乎都找不到能够阻止输出文件以空行开头的选项。我需要在第一行而不是第二行中使用列标题。
这些脚本需要在Windows Server上针对Oracle 12c(12.1.0.2.0)数据库运行,使用SQLPLUS执行SQL命令并使用PowerShell / batch作为脚本包装器。
经过一段时间的搜索并尝试了各种选项,这些选项似乎只会对CSV输出的旧方法产生任何影响。最终,我找到了SET命令的Oracle文档,并发现使用SET NEWPAGE
时诸如SET TRIMSPOOL
,SET MARK[UP]
之类的东西无效。
Oracle SET命令文档在这里:https://docs.oracle.com/en/database/oracle/oracle-database/12.2/sqpug/SET-system-variable-summary.html#GUID-0AA910C4-C22A-4A9E-BE13-AAA059CC7919
是否有一种简单的方法可以消除或取消空白的第一行?我真的不想写更多的文件处理脚本,可以使用PowerShell / Batch从文件中删除该行。这似乎是一件非常愚蠢的事情……
下面是我的SQL的简化版本,输出仍然包含空白的第一行。
column thespoolfile new_value thespoolfile
select 'D:\Temp\outfile-detail-' || TO_CHAR( sysdate, 'YYYYMMDDHH24MI' ) || '.csv' as thespoolfile from dual;
set markup csv on quote on;
SET FEEDBACK OFF;
set trimspool on;
SET HEADSEP off;
SET SQLBLANKLINES off;
SET termout OFF;
spool &thespoolfile;
set define off;
select *
from <table>;
spool off;
exit
答案 0 :(得分:0)
您需要使用以下选项
SET NEWPAGE NONE
它会抑制第一个空白行,这会困扰您。
干杯!