在shell脚本中捕获db2 sql结果

时间:2012-01-17 21:44:43

标签: sql shell db2

我有一个shell脚本,它将连接到数据库并获得结果。我的脚本就像

#!/bin/bash
getResults()
{
    db2 "connect to ${1} user ${2} using ${3}"
    db2 "set schema ${4}"
    status=`db2 -x "select status from results where id=1"`
    echo $status
}
#MAIN STARS HERE
getResults dbname foo bar test

现在我想使用

从结果表中获取多个列
select status,timestamp from results where id=1

如何运行上述查询并使用单个查询将状态和时间戳捕获到两个不同的shell变量中,而不是运行2个不同的查询,如

#!/bin/bash
getResults()
{
    db2 "connect to ${1} user ${2} using ${3}"
    db2 "set schema ${4}"
    status=`db2 -x "select status from results where id=1"`
    echo $status
     timestamp=`db2 -x "select timestamp from results where id=1"`
    echo $timestamp

}
#MAIN STARS HERE
getResults dbname foo bar test

我的结果表如下:

create table (id number, status char(1), timestamp datetime);

数据就像

1 P <some ts>
2 F <some ts>

提前致谢!

1 个答案:

答案 0 :(得分:2)

问题是你在getResults函数中创建的数据库连接对子shell是不可见的(即当你调用db2 -x时)。使用反引号调用一个新的shell。

要完成这项工作,您需要将查询保存在同一个shell中:

db2 "connect to ${1} user ${2} using ${3}"
db2 "set schema ${4}"

db2 -x "select status,timestamp from results where id = 1" | while read status timestamp ; do
    echo $status
    echo $timestamp
done

请注意,在此处使用while循环,如果查询返回的行超过1行,则会输出多行。修改SQL很容易只返回1行。