0

私はUNIXスクリプトが初めてなので。ASE ISQL で SQL ステートメントを実行しています。SQL ステートメントが結果を返す場合、その結果を特定のユーザーにメールで送信する必要があります。また、SQL が結果を返さない場合は、メールを送信しないでください。
私が書いたサンプルスクリプトは次のとおりです。

#!/bin/ksh
isql -U$DBO -S$DSQUERY -D$DBNAME -P$PASSWORD << END 
go
select * from 'Table'
go
if (@@rowcount !=0)

mailx -s "Hello" XYZ@gmail.com 


END

どこが間違っているのか教えてください。

4

1 に答える 1

0

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 アカウントに送信することをお勧めしますか?

于 2011-09-29T16:00:39.347 に答える