从 sqlplus 中的过程将输出写入文件 - SPOOL

Posted

技术标签:

【中文标题】从 sqlplus 中的过程将输出写入文件 - SPOOL【英文标题】:writing output to a file from a procedure in sqlplus - SPOOL 【发布时间】:2015-02-26 12:04:47 【问题描述】:

由于无法使用 UTL_FILE(缺乏权限,更改不会发生:/)我正在搞乱使用 SPOOL 将我的程序的输出获取到 CSV 文件。我将 serveroutput 设置为“on”,过程使用 DBMS_OUTPUT.PUT_LINE。 我正在尝试将其包装在一个 sql 文件中。

我遇到问题的部分:

spool output.csv
/
DECLARE
...
BEGIN
... 
END;
/
spool off
quit
/ 

问题是,这样整个块都在我的输出文件中,然后是输出,而我只想要输出。

我也尝试过使用带有 PIPELINED 关键字的函数并通过 PIPE ROW 方法输出行,希望 SELECT * FROM TABLE () 语法可以帮助我,但这是同一个故事。

任何解决方法?

【问题讨论】:

community.oracle.com/thread/320407 这个例子和我有同样的问题 - 如果你复制/粘贴上一篇文章中的块并检查输出文件,你会注意到我的意思。 【参考方案1】:

好的,终于知道问题出在哪里了。标准的 SQL PLUS 开关效果很好(trimspool、termout、sqlprompt 等),但是您必须直接使用 SQL Plus。如,不要为此使用 Oracle SQL Developer。 您在其中打开的那些该死的工作表在 SQL Plus 相关内容中的行为似乎有所不同。 我把我正在做的所有事情都转移到我用 SQL Developer 连接的机器上,直接登录到 SQL Plus,从命令行执行我的 .sql 脚本,瞧!一个干净的 .csv 文件。

【讨论】:

以上是关于从 sqlplus 中的过程将输出写入文件 - SPOOL的主要内容,如果未能解决你的问题,请参考以下文章

sqlplus 命令问题

如何从 Sqlplus 输出中删除下划线

将 sqlplus 命令的输出保存到数组中的任何可能方法 - Perl

从 SQLPlus 捕获 Java 中的错误代码

Spark将输出写入foreach批处理中的一个文件

如何使用sqlplus在shell中存储存储过程返回的多个输出列