【问题标题】:Remove/Prevent First Blank from Oracle CSV MARKUP output file从 Oracle CSV MARKUP 输出文件中删除/防止第一个空白
【发布时间】: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 NEWPAGESET 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 和包含 &amp; 的字符串。没有SET DEFINE OFF 这会中断。 SET PAGES 0 完全删除了标题,所以也没有帮助
  • 使用 SQL*Plus 是绝对要求,还是可以切换到SQLcl,它有更好的格式化选项?

标签: windows oracle oracle12c sqlplus


【解决方案1】:

您需要使用以下选项

SET NEWPAGE NONE

它会抑制第一个空白行,这让你很困扰。

干杯!!

【讨论】:

  • 此答案未按要求输出 CSV。
  • 一秒钟,这是一个示例代码。问题的解决方案是SET NEWPAGE NONE。把它放在你的代码中,它会取消第一个空行。现在,看看我的答案
  • 不正确,请参阅文档和我的问题,其中明确解释说 [SET NEWPAGE] 在使用 SET MARK[UP] 选项时无效
  • 你说得对,与标记一起使用时不给我结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-27
  • 1970-01-01
  • 2011-05-30
  • 1970-01-01
  • 1970-01-01
  • 2020-09-11
  • 1970-01-01
相关资源
最近更新 更多