从oracle工作和电子邮件地址调用时,邮件无法正常工作

时间:2016-04-22 14:01:40

标签: oracle shell email

我从Oracle Package调用shell脚本。 shell脚本将从oracle表生成一些文件,并生成文件的电子邮件摘要。

shell脚本中提到的电子邮件列表是硬编码的。我试图在shell脚本中替换硬编码的电子邮件,并从oracle表中获取此列表。

所做的所有更改都很好。执行期间没有错误。但我没有收到电子邮件的地址是从变量中获取的。

以下是流程和变更的详细信息:

这是oracle包中的一项工作:

DBMS_SCHEDULER.CREATE_JOB(
    job_name             => 'ExtractGen',
    job_type             => 'EXECUTABLE',
    number_of_arguments  => 3,
    job_action           => vjob,
    auto_drop            => true);

DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE('ExtractGen',1,var1);
DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE('ExtractGen',2,var2);
DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE('ExtractGen',3,var3);
DBMS_SCHEDULER.ENABLE('ExtractGen');

这是在shell脚本中添加的新块,用于从oracle表中获取电子邮件列表以替换使用的硬编码电子邮件地址:

emailList=`$ORACLE_HOME/bin/sqlplus -S user/pwd@sid<<EOF
set heading off
SET echo OFF
SET verify OFF
SET heading OFF
SET feedback OFF
SET pagesize 0
SET linesize 1000
SET escape ~
SELECT EMAIL_ID FROM tbl_email WHERE Upper(EMAIL_GROUP) = 'EXTRACT';
EOF`

mail -s "Extract: Successful" $emailList < $l_extract_dir_name/mail.log;

早些时候,使用硬编码的电子邮件代替变量$ emailList并且工作正常。用变量替换后,我没有收到电子邮件。但是,如果我把下一行硬编码电子邮件用于测试

mail -s "Extract: Successful Hard coded" myemailid@mail.com < $l_extract_dir_name/mail.log;

我在硬编码块发送的同一执行中收到一封电子邮件。我已经提出了不同的主题来确定差异。

我做的下一个测试是直接调用shell脚本而不是从oracle job调用它。 (因为已经准备好了获取文件所需的表,所以这个流程正常工作,没有任何差异,因为从oracle作业调用)。当shell脚本直接使用所需参数执行时,我收到2封电子邮件,包括硬编码和动态电子邮件变量。

有人可以帮忙吗?

提前致谢!

1 个答案:

答案 0 :(得分:1)

确保在从Oracle作业调用shell时设置了$ORACLE_HOME

如果不是这种情况,则必须在启动作业之前添加source <your shell>命令。例如假设您通常运行bash

ExtractGen的开头添加此行(#!/bin/bash之后或类似内容,如果它存在,因为#!...必须是第一行)

source ~/.bashrc