Oracleパッケージからシェルスクリプトを呼び出しています。シェルスクリプトは、Oracleテーブルからいくつかのファイルを生成し、生成されたファイルの概要を電子メールで送信します。oracleジョブから電子メールアドレスが動的に呼び出されたときにメールが機能しない
シェルスクリプトに記載されている電子メールリストは、ハードコードされています。私はシェルスクリプト内のハードコード電子メールを置き換え、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');
これは交換するためにOracleのテーブルから電子メールのリストを取得するには、シェルスクリプトに追加された新しいブロックであり、ハードコードされた電子メールアドレス:
emailList=`$ORACLE_HOME/bin/sqlplus -S user/[email protected]<<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" [email protected] < $l_extract_dir_name/mail.log;
としてテストのためにハードコードされた電子メールで次の行を入れている場合しかし、私は、ハードコーディングされたブロックによって送信された同じ実行中の1通の電子メールを取得しています。私は違いを識別するために別の主題を入れました。
次のテストでは、oracleジョブから呼び出すのではなく、直接シェルスクリプトを呼び出す方法でした。 (ファイルを取得するために必要なテーブルはすでに準備されているため、このフローはOracleジョブからの呼び出しと同じように違いなく正常に動作します)。シェルスクリプトを必要なパラメータで直接実行すると、ハードコードされたメールと動的メールの両方から2つのメールが届いています。
誰でも手助けできますか?
ありがとうございます!
は 'あなたを呼び出すときに定義されたの$ l_extract_dir_name'ですOracleのジョブとスクリプト? –
はい、最初の変数はDIRECTORY_PATHを保持し、シェルではDIRECTORY_PATHの/ maindir/extractdir /にシェル名を追加し、シェルの/ maindir/extractdir/clientIDを追加します。 –