打印日志文件,并输出为 sql 块安排的 cron 作业 - 带有日期和时间(cron 的所有执行)

打印日志文件,并输出为 sql 块安排的 cron 作业 - 带有日期和时间(cron 的所有执行)

我有一个执行 pl/sql 块的 shell 脚本,我将输出打印到输出文件,但它不保留旧信息,也不显示执行脚本时的时间和日期。

我的脚本如下。

#!/bin/bash

sqlplus -s $DATABASE > output << EOSQL 

SET FEEDBACK ON

declare

veventSource varchar2(20);
verrorcode integer;
verrorMessage varchar2(255);

begin

for rec in (select substr(customer,3) as pid, substr(account_num,1,2) as 
countrycode from account 
where substr(account_num,1,2) = substr(account_num,3,2)
and customernot in (select customer from custsource) )

loop

veventSource := rec.countrycode||'_'||rec.pid;
IPGDDL.LINKTOAC(rec.countrycode,rec.LID,veventSource,
'01-JAN-1971',null,'F',null,null,null,null,null,verrorcode,verrorMessage);
dbms_output.put_line(verrorcode);
dbms_output.put_line(verrorMessage);
commit;

end loop;

end;
/
EXIT

EOSQL

执行脚本后,我确实有一个日志文件,它只打印PL/SQL Procedure completed successfully.

我希望将 sql 输出打印在目录中的 output.txt 文件中,其中包含使用此脚本运行 cron 作业时的日期和时间,并将所有旧数据保留在日志中。

任何人都可以帮忙解决这个问题吗?

答案1

sqlplus打印出脚本的输出,您可以使用:

set serveroutput on

SQL*Plus® 用户指南和参考:

DBMS_OUTPUT.PUT_LINE控制是否显示SQL*Plus 中存储过程或 PL/SQL 块的输出(即)。

要有输出附加的output.txt可以使用>>重定向运算符:

sqlplus -s $DATABASE >>output.txt << EOSQL
...

运算>符将其右侧的文件(如果存在)截断至零大小。
参考:Bash 参考手册(假设 Bash 基于#!/bin/bash脚本的 shebang)。

要包含 cron 作业的执行日期和时间,您可以添加

date >>output.txt

在调用 之前添加到您的脚本中sqlplus。请参阅系统上安装的命令
的文档(例如),了解可用的日期格式选项。dateman date

或者,您可以删除该-s选项sqlplus:其输出将包含时间戳,从而使您无需使用任何进一步的命令来记录执行日期/时间(但它也将包含许多可能不需要的消息)。

相关内容