2011-09-29 5 views
0

Unix 스크립팅을 처음 접했기 때문에. ASE ISQL에서 SQL 문을 실행하고 있는데 SQL 문에서 결과가 나온다면 그 결과를 특정 사용자에게 메일로 보내야합니다. SQL이 결과를 반환하지 않으면 메일을 보내지 않아야합니다. 내가 wriiten 한
샘플 스크립트는 다음과 같습니다UNIX 스크립트가있는 ASEISQL에서 SQL 문 실행

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

mailx -s "Hello" [email protected] 


END 

은 알려주세요 어디에 내가 잘못 갈거야?

+0

mailx는 유닉스 명령이다. DB에 외부 프로그램을 호출 할 수있는 방법이 있는지 확인하십시오. 그런 다음 SQL 문자열로 메일 msg를 어셈블하는 방법을 찾아야합니다. 조건부 범위를 막기 위해 닫는 'endif'(또는 비슷한)이 필요합니까? 어쩌면 다시는 아니지만 DB의 프로그래밍 매뉴얼을 참조하십시오. 또한 SQL 출력을 파일 (또는 env var)로 캡쳐하고 셸 스크립트가 메일 또는 메일 없음에 대한 조건부 논리를 제공하도록 할 수도 있습니다. 당신의 0 %가 동의하면, 나는 더 이상 아무것도 쓰지 않는 시간을 보내고 싶지 않습니다. 행운을 빕니다. – shellter

답변

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" [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 계정으로 보내는 것이 좋습니다.

+0

사실 내 문제는 내 SQL 문이 모든 결과를 반환하는 경우에만 해당 결과 집합을 메일로 보내야합니다. #!/bin/ksh isql -U $ DBO -S $ DSQUERY -D $ DBNAME -P $ PASSWORD << END | mailx -s "Hello"[email protected] select *에서 다음 형식으로 스크립트 작성 중 : 'Table'go END ... 그러면 SQL 문의 결과가 메일로 전송됩니다. 그러나 나는 그런 식으로 스크립트를 작성할 필요가있다. 그런 다음 SQL 문 결과가 Blank인지 아닌지 확인한 다음 그 결과가 메일로 전송된다. – WENzER

+0

감사합니다. 조나단이 스크립트가 작동했습니다. 그리고 샘플 용으로 Gmail 주소를 입력했습니다. – WENzER

+0

FYI : 도메인 example.com 및 example.org는 예제에서 사용하도록 예약되어 있습니다. 따라서 [email protected] (또는 유사한 메일)을 예제 이메일 주소로 사용할 수 있습니다. 나는 이것이 하나의 예라고 생각했지만 재미있는 것들이 알려졌다. –