2016-08-01 59 views
3
# it works fine 
db2 connect to <db_name> user <user> using <passwd> 
while read aline 
do 
    tab=$(echo $aline | awk -F',' '{print $1}') 
    col=$(echo $aline | awk -F',' '{print $2}') 
    max_id=$(db2 -x "select count($col) from $tab") 
    echo $tab $col $max_id 
done < tab.ls 


# it doesn't work because of lost DB connection 
db2 connect to <db_name> user <user> using <passwd> 
cat tab.lst | while read aline 
do 
    tab=$(echo $aline | awk -F',' '{print $1}') 
    col=$(echo $aline | awk -F',' '{print $2}') 
    max_id=$(db2 -x "select count($col) from $tab") 
    echo $tab $col $max_id 
done 

我有两部分代码,两者只有很小的差异,第一部分按预期运行,但第二部分没有。BASH中的流水线导致与db2丢失连接

似乎管道导致丢失数据库连接。

任何人都可以解释为什么。

在此先感谢!

BTW:我在RH Linux的6.6,庆典测试

+1

的多次调用'awk'是浪费和不必要的; 'IFS =时,读-r选项卡col other;做max_id = $(...);回声...;完成 chepner

+0

非常感谢您!它已退出帮助! – user6379021

回答

0

DB2 documentation说:

您可以连接到在同一时间只有一个DB2数据库;但是,您可以使用多个CONNECT语句通过使用别名参数来区分连接来连接到多个DB2数据源,您可以使用 。

在上例中,您连接了两次。考虑重置或终止您的连接:

db2 connection reset 

db2 terminate