2016-04-22 25 views
1

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つのメールが届いています。

誰でも手助けできますか?

ありがとうございます!

+0

は 'あなたを呼び出すときに定義されたの$ l_extract_dir_name'ですOracleのジョブとスクリプト? –

+0

はい、最初の変数はDIRECTORY_PATHを保持し、シェルではDIRECTORY_PATHの/ maindir/extractdir /にシェル名を追加し、シェルの/ maindir/extractdir/clientIDを追加します。 –

答えて

1

シェルがOracleジョブから呼び出されたときに$ORACLE_HOMEが設定されていることを確認してください。

そうでない場合は、ジョブを起動する前にsource <your shell>コマンドを追加する必要があります。例えば普段bashを実行すると言う:

#!...は、最初の行でなければならないので、それが存在する場合#!/bin/bashまたは類似の後)ExtractGenの先頭に次の行を追加

source ~/.bashrc 
+0

ありがとう!私はこれを試し、あなたに結果を知らせます。 –

+0

#!/ bin/shの後にソース**〜/ .bashrc **を追加するとうまくいきます。ありがとうございましたJ. Chomel –

関連する問題