我从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封电子邮件,包括硬编码和动态电子邮件变量。
有人可以帮忙吗?
提前致谢!
答案 0 :(得分:1)
确保在从Oracle作业调用shell时设置了$ORACLE_HOME
。
如果不是这种情况,则必须在启动作业之前添加source <your shell>
命令。例如假设您通常运行bash
:
在ExtractGen
的开头添加此行(#!/bin/bash
之后或类似内容,如果它存在,因为#!...
必须是第一行)
source ~/.bashrc