在shell脚本中使用 isql 执行SQL语句 查询sybase数据库中满足条件的记录条数,怎么把查询结果赋给变量?

语句如下:
#!/bin/bash
isql -U natuser -P zjtt@nat -S natdb <<END
use natdb
go
select count(*) from test_userdata
go
END
这个执行完后,我想判断是否存在记录,存在的话我就update,不存在的话我就insert,但是不知道怎么把结果赋给变量,也就不知道该怎么判断。刚学shell,很多概念不大懂,在线等。

第1个回答  2011-10-20
注意此处:
isql -U natuser -P zjtt@nat -S natdb <<END
如下供参考
·1 若要重定向到文件
isql -U natuser -P zjtt@nat -S natdb <<END >out.txt
即将查询结果重定向到out.txt文件中

·2若要输出至变量
isql -U natuser -P zjtt@nat -S natdb <<END |read xarg

·3若要循环输出至变量,可参照read方式类推追问

今天测试 写到文件可行,写到变量貌似不行。不过最后我用shell调用存储过程解决了。

追答

【基于oracle数据库】
·1、如果想将sqlplus的多个查询结果循环输出至变量,那是不明智的选择。
-->因为,sqlplus的查询有点儿封闭,如果采用while循环将查询结果赋值给变量,那就会导致每输出一行,就会执行一次sqlplus,效率低下至极,所以一般都是将查询结果为多行的操作先一次输出至文件,在利用文件执行遍历。附利用sqlplus执行多行查询并输出至变量:
sqlplus -s uid/pwd@ora_tns <<!| while read stout
select col_a,col_b from table;
!
do
echo $col_a,$col_b
done
______________________________________________________________________

没用过Sybase啊,抱歉

本回答被提问者采纳