SQL の出力をシェル変数にキャプチャし、メールを送信する前に結果をテストする必要があると思います。
#!/bin/ksh
num=$(isql -U$DBO -S$DSQUERY -D$DBNAME -P$PASSWORD << END
select count(*) from 'Table'
go
END
)
if [ "$num" -gt 0 ]
then mailx -s "Hello" XYZ@gmail.com < /dev/null
fi
isql
プログラムは番号のみを出力し、見出しやその他の情報は出力しないと想定しています。より詳細な場合は、より機密性の高いテストを行う必要があります。
COUNT(*)
また、これは、「すべてを選択して、何行あったかをカウントする」バージョンよりも迅速かつ正確に求めていることに注意してください。
実際、私の問題は、SQL ステートメントが何らかの結果を返す場合、その結果セットのみをメールで送信する必要があることです。
次に、次を使用します。
#!/bin/ksh
tmp=${TMPDIR:-/tmp}/results.$$
trap "rm -f $tmp; exit 1" 0 1 2 3 13 15
isql -U$DBO -S$DSQUERY -D$DBNAME -P$PASSWORD << END > $tmp
select * from 'Table'
go
END
if [ -s $tmp ]
then mailx -s "Hello" XYZ@gmail.com < $tmp || exit 1
fi
rm -f $tmp
trap 0
exit 0
これにより、結果がファイルに取り込まれます。ファイルが空でない場合 ( -s
)、電子メールの本文としてファイルを送信します。件名をより意味のあるものに変更してください。また、企業の電子メールを Gmail アカウントに送信することをお勧めしますか?