sqlplus 输出标题格式错误和不必要的空行

Posted

技术标签:

【中文标题】sqlplus 输出标题格式错误和不必要的空行【英文标题】:sqlplus output header wrongly formatted and un-necessary blank lines 【发布时间】:2017-10-11 22:37:40 【问题描述】:

我是 SQL 新手,我正在尝试运行查询以使用特定条件从数据库中提取警报并将结果以 csv 格式输出到文件。

我创建了以下 SQL 脚本,但是没有以所需格式生成标头。

set markup html on ENTMAP on spool off PREFORMAT on;
set pagesize 0 embedded on;
set feedback off;
set termout off;
set trimout on;
spool on;
set trimspool on;
spool /tmp/scripts/outputFiles/calExport.csv REPLACE;
select (y.ALARM_DN||','||x.CO_NAME||','||to_char(y.ALARM_TIME, 'dd-MM-yyyy HH24:MI:SS')||','||y.ALARM_TEXT||','||y.ALARM_TYPE||','||y.PERCEIVED_SEVERITY||','||y.ADDITIONAL_INFO_1||','||y.ADDITIONAL_INFO_3||','||y.ADDITIONAL_INFO_2) from CTP_COMMON_OBJECTS x, FM_ALARM y where y.NE_GID=x.CO_GID and y.ALARM_STATUS=1;
spool off;
exit;

电流输出: '

' (Y.ALARM_DN||','||X.CO_NAME||','||TO_CHAR(Y.ALARM_TIME,'DD-MM-YYYYHH24:MI:SS')|| -------------------------------------------------- ------------------------------ xxxx/xxxx-143/xxxx-143,xxxxxxxxxxxxxxxxxxxx,xxxxxxxxxxxxxx ,03-10-2017 15:19:49,Dead Peer Detected,1,2,shared:N;,,additionalFaultId:0;

xxxx/xxxx-143/xxxx-143,xxxxxxxxxxxxxxxxxxxx,xxxxxxxxxxxxxxxxxx,13-09- 2017 12:45:48,单元 0 上的 LOS,以太网接口 4,1,1,,,

xxxx/xxxx-143/xxxx-143,xxxxxxxxxxxxxxxxxxxx,03-10-2017 15:19:39,BA 通知,3,3,收集的文件,,100 100 100 6450xxxx 1 0 path=/xxxx-1(Left) additionalFaultId:6450;

问题:

    如何更正标题格式以匹配以下内容?

    ALARM_DN,NAME,ALARM_TIME,TEXT,TYPE,SEVERITY,A,B,C
    

    如何去掉输出文件开头和结尾的“pre”标签?

    如何去除输出中每一行后的空白行?我使用了 set trimspool on 但空白行仍然存在。

感谢您的帮助。

BR,

上午

【问题讨论】:

【参考方案1】:

要将标题更改为您想要的标题,请将您的 SQL*Plus 脚本更改为:

set markup HTML on ENTMAP on spool off PREFORMAT on;
set pagesize 0 embedded on;
set feedback off;
set termout off;
set trimout on;
SET HEADING OFF;
spool on;
set trimspool on;
spool /tmp/scripts/outputFiles/calExport.csv REPLACE;
SELECT 'ALARM_DN,NAME,ALARM_TIME,TEXT,TYPE,SEVERITY,A,B,C' FROM DUAL
UNION ALL
select (y.ALARM_DN||','||x.CO_NAME||','||to_char(y.ALARM_TIME, 'dd-MM-yyyy HH24:MI:SS')||','||y.ALARM_TEXT||','||y.ALARM_TYPE||','||y.PERCEIVED_SEVERITY||','||y.ADDITIONAL_INFO_1||','||y.ADDITIONAL_INFO_3||','||y.ADDITIONAL_INFO_2) from CTP_COMMON_OBJECTS x, FM_ALARM y where y.NE_GID=x.CO_GID and y.ALARM_STATUS=1;
spool off;
exit;

祝你好运。

【讨论】:

感谢 Bob,解决了标题问题。对于空白行,我设法使用以下set wrap offset linesize xxxx 命令解决了它。任何想法如何从文件的开头和结尾删除
 标记?另外,在一列中,我的结果已经包含“,”,所以当假脱机到 csv 时,由于这个逗号符号,这个单元格被错误地分割了......我该如何克服这个问题?
<pre> 标签上,这纯粹是一种猜测,但您可以将文件的第一行更改为PREFORMAT OFF。如果您的数据已经包含逗号,那么您可以使用另一个字符来分隔字段 - 我过去使用过 |(竖线),因为它相对不常见 - 或者使用 @987654327 将数据中的逗号替换为空格@ 功能。祝你好运。

以上是关于sqlplus 输出标题格式错误和不必要的空行的主要内容,如果未能解决你的问题,请参考以下文章

Eclipse Formatter - 如何避免空行和空格?

sqlplus spooling:如何摆脱第一个空行?

从 sqlplus 输出 json。格式化它,使其出现在一行上

sqlplus 不在指定的输出文件中记录编译错误

[oracle]sqlplus 输出格式化print_table学习

[oracle]sqlplus 输出格式化print_table学习