在shell脚本中捕获db2输出

时间:2011-10-03 23:14:21

标签: bash db2

我必须将shell脚本从Oracle转换为db2。我在这个论坛上发现了我使用的Oracle脚本示例;看起来像这样

#!/bin/bash
OUT=`$ORACLE_HOME/bin/sqlplus -s user/pass@instance   << EOF
select sysdate from dual;
exit success
EOF`
echo $OUT

这将输出“03-OCT-11”(Oracle sysdate)。我的db2脚本看起来像这样

#!/bin/bash
db2bin="/users/db2inst1/sqllib/bin"
#connect
$db2bin/db2 connect to myschema;
#query
$db2bin/db2 "SELECT CURRENT_DATE FROM SYSIBM.SYSDUMMY1 WITH UR";
#debug
echo $?
#check
if [ $? = "0" ] then         echo "found-do something"
else        echo "not found-good bye"
fi
#terminate
$db2bin/db2 quit;

它有效,但没有检索日期;只有“0”或“1”(真/假)。如何从Db2查询结果中检索日期?

3 个答案:

答案 0 :(得分:2)

我对db2并不熟悉,但听起来你需要重定向SELECT语句的输出。

例如,db2 SELECT CURRENT_DATE FROM SYSIBM.SYSDUMMY1 WITH UR > /tmp/output

此处提供更多信息:http://www.ibm.com/developerworks/data/library/techarticle/dm-0503melnyk/

编辑:同样,db2选择行输出到stdout吗?我没有随时可以使用的副本:/

答案 1 :(得分:2)

我明白了:诀窍是使用/ dev / null。

#!/bin/bash
DB2INSTANCE=db2inst1
BIN="/users/db2inst1/sqllib/bin"
OUT=`${BIN}/db2 connect to myschema > /dev/null 
${BIN}/db2 -x "SELECT CURRENT_DATE FROM SYSIBM.SYSDUMMY1 WITH UR"
${BIN}/db2 quit > /dev/null
`
echo $OUT

希望这有帮助。

答案 2 :(得分:2)

Chris,您的环境变量和DB2命令路径应该通过获取db2profile来设置。使用SQL文件或作为命令行一部分指定的单个语句调用db2命令时,不需要quit命令。

#!/bin/bash
. ~db2inst1/sqllib/db2profile
OUT=`db2 connect to myschema >/dev/null 2>&1; db2 -x values current date`

在脚本结束之前,您的数据库连接将保持可用,因此您可以在不重新连接的情况下运行连续语句。

#!/bin/bash
. ~db2inst1/sqllib/db2profile
db2 connect to myschema >/dev/null 
OUT=`db2 -x values current date`
AAA=`db2 -x " select a from sometable where b = 'c' " `