2

データベースに接続し、特定の顧客に配送されている注文のリストをスプールして電子メールで送信するスクリプトを作成しましたが、顧客には何も配送されず、空白の添付ファイルを受け取る日があります。

SQL の結果が null の場合、顧客をスキップする最善の方法は何ですか?

スクリプトでは、変数として設定された口座番号をループします。

accounts=100...

for i in $accounts {
do

do_data $i
do_mail $i

}

次のような SQL:

do_data () {
        sqlplus -s "$user/$pass@$db" <<EOF
        SPOOL $1.csv
        SELECT order_no
        FROM orders
        WHERE customer_number = $1
}

基本的に、do_data何も出力しない場合は、まで到達しないはずdo_mailです。

4

1 に答える 1

0

結果が $1.csv ファイルにスプールされていることがわかります ファイルが空でないかどうかを確認し、それに基づいて do_mail 関数を呼び出すかどうかを確認します データが見つからない場合、Oracle が何も返さないことを確認します

もう 1 つの方法は、SQL ステートメントを変更して文字列 "NO DATA FOUND" を返すことです。そのような文字列が出力に含まれているかどうかを確認し、それに応じて動作させることができます。

于 2013-10-28T19:05:08.070 に答える