【发布时间】:2019-11-24 21:50:29
【问题描述】:
我目前正在编写脚本以将表数据输出到 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”并删除“设置定义关闭”吗?
-
set pages 0也会隐藏标题。 -
@MartinSchapendonk
SET DEFINE OFF是必需的,因为我使用REPLACE和包含&的字符串。没有SET DEFINE OFF这会中断。SET PAGES 0完全删除了标题,所以也没有帮助 -
使用 SQL*Plus 是绝对要求,还是可以切换到SQLcl,它有更好的格式化选项?
标签: windows oracle oracle12c sqlplus