【问题标题】:Want to get result of SQL query into a variable想要将 SQL 查询的结果放入变量中
【发布时间】:2017-06-02 17:38:01
【问题描述】:

在此脚本中,我尝试将 SQL 查询的结果转换为变量计数,稍后我会比较该变量计数以确定是否发送电子邮件。

当我执行脚本时,我得到一个integer expression expected 错误。

这是我的脚本。

LOGFILE=/home/ni916c/${SCRIPT}.$RUN_DATE.log
RPTNAME=/home/ni916c/ASPEN_LOADER_error.xls
#rm $LOGFILE
count=$(sqlplus -S ni916c/rajabeta17 <<-EOF
set heading off
        SET FEEDBACK OFF

  SELECT 'Loader File Failed:: '||to_char(load_id) ||'  '|| to_char(file_id) ||'  '||file_name||'  '||to_char(load_status_id) FROM DL_FILES_RECEIVED
  WHERE
 period_id = to_number(to_char(sysdate,'yyyymm'))
  and load_status_id=300;
-- in (select load_status_id  from DL_LOAD_STATUS where category like '%ERROR%');
  exit;
  EOF
)
echo "$count" >> $LOGFILE
if [ "$count" -ne 0 ]
then
mailx -s "LOADER ERROR" rk862h@att.com < $LOGFILE
fi

【问题讨论】:

  • 你在 $LOGFILE 中看到了什么?
  • 是哪一行导致了这个错误?
  • 我在日志文件中得到查询结果。 ./abcd.sh: line 27: [: Loader File Failed:: 554187 970 VSTL140117.VSTL140117 300: integer expression expected
  • 那么你的问题似乎是 SQL 问题,而不是 Bash 脚本问题。你不能在 Bash 中使用这样的字符串进行算术测试。

标签: bash unix scripting


【解决方案1】:

我假设错误来自两个来源之一:

  1. 您的 SQL 语句有问题(在这种情况下,您应该尝试在脚本之外对其进行调试)
  2. 失败的是if [ "$count" -ne 0 ],因为您的语句没有返回整数。

如果问题是上述 (2),您可能需要在脚本中添加某种错误处理来检测意外结果。例如:

if
  [[ "$count" =~ ^[0-9]+$ ]]
then
  # Ok, we have an integer
else
  # Oops, something went wrong
fi

您还应该确保 SQL 语句没有返回导致 count 变量不能被识别为整数的其他字符,在这种情况下可能需要进行一些修整。

【讨论】:

  • 我想检查查询是否返回任何行。如果是这样,则表明存在一些错误并且应该邮寄该错误。这就是我要实现的目标
  • 是的,但是你确定请求返回的实际上是一个整数吗?如果请求中有错误,或者如果您的 SQL 客户端以不只是原始整数的方式格式化结果,那么您的脚本可能会阻塞。不知道您的请求返回的确切字符串,我无法确定。
  • 这是查询返回的确切字符串。加载程序文件失败:: 554187 970 VSTL140117.VSTL140117 300
  • 脚本在添加以下内容后运行良好。 echo "$count" >> $LOGFILE Linecount=cat $LOGFILE|wc -l if [ $Linecount -gt 1 ] 感谢 Fred 的帮助。 :)
猜你喜欢
  • 2015-12-04
  • 1970-01-01
  • 2018-11-30
  • 2011-04-19
  • 1970-01-01
  • 1970-01-01
  • 2018-10-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多