语句如下:
#!/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方式类推追问
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啊,抱歉