나는 당신이 대략 같은 쉘 변수로 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" [email protected] < /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" [email protected] < $tmp || exit 1
fi
rm -f $tmp
trap 0
exit 0
는이 파일에 결과를 캡처합니다. 파일이 비어 있지 않으면 (-s
) 파일을 전자 메일의 본문으로 보냅니다. 주제를 좀 더 의미있는 것으로 변경하십시오. 또한 기업 이메일을 Gmail 계정으로 보내는 것이 좋습니다.
mailx는 유닉스 명령이다. DB에 외부 프로그램을 호출 할 수있는 방법이 있는지 확인하십시오. 그런 다음 SQL 문자열로 메일 msg를 어셈블하는 방법을 찾아야합니다. 조건부 범위를 막기 위해 닫는 'endif'(또는 비슷한)이 필요합니까? 어쩌면 다시는 아니지만 DB의 프로그래밍 매뉴얼을 참조하십시오. 또한 SQL 출력을 파일 (또는 env var)로 캡쳐하고 셸 스크립트가 메일 또는 메일 없음에 대한 조건부 논리를 제공하도록 할 수도 있습니다. 당신의 0 %가 동의하면, 나는 더 이상 아무것도 쓰지 않는 시간을 보내고 싶지 않습니다. 행운을 빕니다. – shellter