Oracle/SQL PLUS:如何假脱机日志并在整个脚本中间歇性写入

问题描述 投票:0回答:3

弄清楚如何假脱机到文件已经很容易了。 我希望在写入每个命令后有一个选项可以写入文本文件。 我不确定如何向团队中的其他人传达长脚本的状态。 我们寻求的解决方案是将日志文件写入网络驱动器,当脚本执行时,他们将能够跟进。

但是,这似乎只在假脱机关闭后将输出写入文件;命令位于文件末尾。

有什么方法可以实现我们想要做的事情,无论是通过假脱机日志文件还是其他方法?

这是我到目前为止的代码。

set timing on;
set echo on;

column date_column new_value today_var
select to_char(current_timestamp, 'yyyymmdd_HH24_MI') as date_column
  from dual
/
select current_timestamp from dual;

SPOOL 'Z:\log\KPI\secondary_reporting_&today_var..log'

... lots of stuff...
spool off;
oracle-database sqlplus
3个回答
3
投票

据我所知,无法控制何时将假脱机输出写入文件。不过,解决这个问题的一种方法可能是完全放弃假脱机并仅重定向输出:

$ sqlplus @/path/to/script.sql >& /path/to/script.log

2
投票

我想到了两种方法,具体取决于您的“东西”是什么。

1) 如果您的代码有大量 SQL 语句和 PL/SQL 块,那么您可以重复假脱机一段时间。为此,请使用

spool <filename> append
语句。

SQL> help spool

 SPOOL
 -----

 Stores query results in a file, or optionally sends the file to a printer.
 In iSQL*Plus, use the Preferences screen to direct output to a file.

 SPO[OL] [file_name[.ext] [CRE[ATE] | REP[LACE] | APP[END]] | OFF | OUT]

 Not available in iSQL*Plus

2) 如果您有长时间运行的 PL/SQL 过程,请使用

UTL_FILE
包。有关更多信息,请参阅https://docs.oracle.com/html/B14258_02/u_file.htm。这确实需要数据库中的一些设置和管理权限来设置允许写入的目录。


0
投票

对于假脱机和日志,您可以使用查询。

-- Enable query echoing and other useful settings
SET ECHO ON;
SET FEEDBACK ON;
SET PAGESIZE 1000;
SET LINESIZE 200;
 
-- Start spooling to a file
SPOOL C:\Users\YourUsername\Documents\logfile.log;
 
-- Your SQL query
SELECT * FROM your_table;
 
-- Stop spooling
SPOOL OFF;
 
-- Exit (optional)
EXIT;
© www.soinside.com 2019 - 2024. All rights reserved.