我有一个执行 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
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
。请参阅系统上安装的命令
的文档(例如),了解可用的日期格式选项。date
man date
或者,您可以删除该-s
选项sqlplus
:其输出将包含时间戳,从而使您无需使用任何进一步的命令来记录执行日期/时间(但它也将包含许多可能不需要的消息)。