2011-10-10 45 views
1

我想编写调用SQL过程(最终贯穿调度脚本)一个shell脚本,如果程序提供任何类型的SQL错误,发送错误作为我希望在脚本中指定的电子邮件。 我该怎么办?调用SQL过程,如果错误

编辑:这里是我的尝试。我无法弄清楚如何在发生错误时才发送电子邮件的逻辑。

export ORACLE_HOME=/oracle/app/products/11gr1/db 
export ORACLE_SID=CTPP01S1 
MAIL_TO="[email protected]" 
LOGFILE=./xxx_job.log   
exec 2>&1 > $LOGFILE   
echo " Job run at: `date`......" 
$ORACLE_HOME/bin/sqlplus -s '/ as sysdba' <<EOF 
set head on; 
set feed on; 
set serveroutput on; 
set linesize 250; 
set pagesize 1000; 
exec schema.proc_name; 
exit 
EOF 
echo "Job ended at: `date`" 
mailx -s "OLBB Extract Results." $MAIL_TO < $LOGFILE 
+1

你尝试过什么和在哪个平台上,你运行shell脚本? – Tony

+0

我正在UNIX上运行shell脚本。谢谢 – Victor

回答

1

如果你想从Oracle发送邮件,然后utl_mail是你的朋友。正如@Tony注意到你没有指定你的平台,但在Linux中有mailUnix这两者都可以通过你的执行来输出。

你可以在包装,比如Python执行SQL任何环境(我有偏见),并从mail

+0

谢谢。但是我只想在发生错误时才发送电子邮件。我怎样才能做到这一点? – Victor

+0

@Kaushik,你刚刚发布的代码;如果你的SQL过程中有一个异常,那么你可以使用utl_mail通过'exception when'发送邮件。如果你使用的是包装器,而不是让SQL抛出异常并将其捕获到外部。在bash中,'$?'是我认为的前一个执行行的返回码,把它放在'if .. fi'和'| if'邮件'如果需要的话...我个人会使用'utl_mail';这很容易。 [这](http://download.oracle.com/docs/cd/B10501_01/appdev.920/a96624/07_errs.htm)展示了如何处理甲骨文的错误。 – Ben