【问题标题】:Is there a way to use SET MARKUP CSV on in the Command window in PL/SQL Developer?有没有办法在 PL/SQL Developer 的命令窗口中使用 SET MARKUP CSV?
【发布时间】:2021-04-10 18:00:09
【问题描述】:

我目前在 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 的命令窗口中运行我的假脱机。有没有办法做到这一点?这是一段很长的sn-p代码。

【问题讨论】:

    标签: oracle sqlplus plsqldeveloper spool


    【解决方案1】:

    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.object_id, ao.created, 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 来打印标题。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2020-08-28
        • 2011-05-04
        • 1970-01-01
        • 1970-01-01
        • 2014-03-22
        • 2022-10-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多