每4秒使用shell脚本显示数据库的结果集

时间:2016-12-14 07:59:11

标签: oracle bash shell

我试图使用shell脚本每4秒从oracle数据库中显示一个结果集。这是我到目前为止,但它给了我oracle版本信息和未格式化的结果:

#!/bin/bash
RETVAL=`sqlplus "username/password@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=HOSTNAME)(Port=1521))(CONNECT_DATA=(SID=SIDNAME)))" <<EOF
SET PAGESIZE 200 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF
select user_id,user_work_class,sol_id,user_appl_name from upr where user_logged_on_flg = 'Y';
EXIT;
EOF`
if [ -z "$RETVAL" ]; then
  echo "No rows returned from database"
  exit 0
else
  echo $RETVAL
fi

任何想法或方向都将受到高度赞赏。

2 个答案:

答案 0 :(得分:1)

如果您的查询返回行,则只能获取要测试的空格之后的内容。 制作代码:

$RETVAL_TST= `echo $RETVAL | awk '{print $2}'`

if [ -z "$RETVAL_TST" ]; then
  echo "No rows returned from database"
  exit 0
else
  echo $RETVAL
fi

但是您测试awk '{print $2}'的列必须是键而不是空的。

答案 1 :(得分:-1)

要每4秒运行一次脚本,您需要设置一个sleep的循环。 如果脚本名为script.sh

for i in {1..100} ; do sh script.sh ; sleep 4 ; done > output

这将在每次运行之间以4秒的间隔运行脚本100次,并将输出保存到名为output的文件中。

编辑 -

如果您希望脚本无限期运行,那么for循环并不是一个好主意。正如@Kacper所提到的,while循环更适合那个 -

while(true) ; do sh script.sh ; sleep 4 ; done > output