微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有办法在 PL/SQL Developer 的命令窗口中使用 SET MARKUP CSV on?

如何解决有没有办法在 PL/SQL Developer 的命令窗口中使用 SET MARKUP CSV on?

我目前在 PL/sql Developer 的命令行窗口中运行的代码

SET MARKUP CSV ON DELIMITER | QUOTE OFF
SET FeedBACK OFF

SPOOL C:\Users\Desktop\SpoolTest.csv

select *
from vendor_data t 
where rownum < 20
;

SPOOL OFF;

我的输出

222339           |067   |001 

306811           |045   |001 

024253           |067   |001             

我需要删除尾随空格:

222339|067|001 

306811|045|001
 
024253|067|001                                  

我遇到了无法设置标记的问题。我必须在 PL/sql Developer 的命令窗口中运行我的假脱机。有没有办法做到这一点?这是一段代码,实际上很长。

解决方法

SET 命令属于 Oracle 的命令行工具 SQL*Plus。

我不使用 PL/SQL Developer(而且 Google 很快没有返回任何有用的东西),所以 - PL/SQL Developer 是否支持 SET 命令?如果没有,那么您就不走运了,但是您可以安装 Oracle Client(如果您还没有安装)并直接在 SQL*Plus 中运行您的脚本。

另一方面,除非我错了,SET MARKUP CSV 对 Oracle 18c 及以上版本有效;在较低版本中,您可以使用 SET MARKUP HTML(即没有 CSV 选项)。

,

PL/SQL Developer 的命令行工具是与 Oracle SQL*Plus 命令行实用程序不同的产品,它具有一组不同的受支持命令。 PL/SQL Developer 的命令行模拟了真正的 SQL*Plus 功能,但只是部分实现。例如,它不支持 SET MARKUP CSV 命令。您可以在 PL/SQL 开发人员手册(帮助 -> 用户指南)中找到受支持命令的完整列表。

在您的情况下,出现尾随空格是因为您正在打印列标题。显然,PL/SQL Developer 尝试按列的最大长度对齐行:

spool file.txt

select ao.object_name,ao.object_id,ao.created,ao.status
  from all_objects ao
 where rownum <= 3;

OBJECT_NAME                                                                       OBJECT_ID CREATED     STATUS
-------------------------------------------------------------------------------- ---------- ----------- -------
TS$                                                                                      16 26.01.2017  VALID
ICOL$                                                                                    20 26.01.2017  VALID

请记住,PL/SQL Developer 对 SET 命令的支持非常有限,我们可以通过简单地不打印标题并将 colwidth 设置为 1 来实现类似 CSV 的假脱机:

spool file.txt

set colsep |
set heading off
set colwidth 1

select ao.object_name,ao.status
  from all_objects ao
 where rownum <= 3;

spool off

将其保存到假脱机文件中:

TS$|16|26.01.2017 13:52:45|VALID
ICOL$|20|26.01.2017 13:52:45|VALID
C_FILE#_BLOCK#|8|26.01.2017 13:52:45|VALID

如果你必须打印标题,你可以在主 sql 之前添加一个额外的 select from dual 来打印标题。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。