使用UNIX脚本在ASEISQL中执行SQL语句

时间:2011-09-29 04:44:49

标签: unix isql

因为我是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

请告诉我哪里出错了?

1 个答案:

答案 0 :(得分:0)

我认为您需要将SQL的输出捕获到shell变量中,然后在发送电子邮件之前测试结果,大致如下:

#!/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帐户是个好主意吗?