【发布时间】:2018-08-23 02:07:37
【问题描述】:
我在 sqlplus 中运行视图并生成报告,然后发送电子邮件 (mailx)。 如果没有记录,它会创建一个空的 excel 输出文件。 我想验证 sql 错误代码,如果没有记录,我想在电子邮件正文中包含“指定时间段内没有记录”。 您能否建议如何捕获 sql 代码,以便我可以更改没有附件的电子邮件正文? 提前致谢。
代码:
sqlplus /@conn<<EOF
WHENEVER SQLERROR EXIT 1 ROLLBACK
WHENEVER OSERROR EXIT 1 ROLLBACK
SET MARKUP HTML ON
SET PAGESIZE 50000
SET FEEDBACK OFF
@/home/user/script.sql;
echo body | mailx
script.sql:
col spoolname new_value spoolname;
Spool /home/path/file
Select * from schema.file;
感谢您的建议。
我已经修改了代码,下面是我现在遇到的错误。
错误:“语法错误;文件意外结束”
请你们检查并提出建议吗?
sqlplus /@conn<<EOF
<SQL error handling & set values >
@/home/user/script.sql;
EOF
CDATE=$CDATE"`date +"%y%m%d"`.xls";
ODFILENAME="/home/usr/reports/ ";
ODFILENAME=$ODFILENAME"$CDATE";
if [ -s "$ODFILENAME" ]; then
BODY=$BODY"Please find the extract."
else
BODY=$BODY"Zero KB file."
fi
mailx
【问题讨论】:
-
你的第二个 EOF 在哪里?您的 shell 脚本代码不完整。
-
WHENEVER SQLERROR EXIT 1 ROLLBACK不会在 select 语句中没有记录的情况下使用退出代码退出会话。如果您正在运行 PL/SQL 块,则可以使用no_data_found之类的异常。否则,@kfinity 的答案,即在 shell 中检查文件大小应该适合你。
标签: oracle shell oracle11g sqlplus