免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5684 | 回复: 6
打印 上一主题 下一主题

AIX shell中select的赋值问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-06-21 11:56 |只看该作者 |倒序浏览
本人菜鸟,被一个问题困扰很久,查了很多网上的资料也没能搞定,期盼大虾们能帮我解惑
shell内容如下:

csname=`db2 connect to icmnlsdb;db2 "select constname from syscat.references where tabname='SQL1209882'"
echo $csname

想把select的结果赋值给csname,并显示出来,结果报错db2 connect is not exsit

我又参考一些网上的方法,改了一下:
csname=`(db2 connect to icmnlsdb;db2 "select constname from syscat.references where tabname='SQL1209882'")

结果报错syntax error:`(' is not expected

望各位大虾指点迷津

论坛徽章:
0
2 [报告]
发表于 2011-06-21 12:14 |只看该作者
本帖最后由 红狐狸 于 2011-06-21 12:22 编辑

类似:
. $DB2INSTPATH/sqllib/db2profile
db2 connect to  icmnlsdb

exec_sql "select INVOICE_DAY-WARN_DAY ,SURE_DAY-WARN_DAY, INVOICE_DAY, SURE_DAY  from t_pub with ur " 1
if [ "$sqlstat" != "02000"  ]; then
fpts=`echo "$SDATA" | sed -e '4,/^$/!d;/^$/d' |awk '{print $1 }' `
fi


exec_sql ()
{
if [ $# -ne 2 ];then
echo -e "时间[`date "+%Y%m%d%T"`] : SQL语句[ "$1" ]缺少执行参数...">> sql.log
exit 1
fi

SQL="$1"
SDATA=`db2 -a "$SQL"`
sqlstat=`echo "$SDATA" | sed -n -e 's/^.*sqlstate: *\([0-9,a-z,A-Z][0-9,a-z,A-Z]
*\).*/\1/p'`
if [ "$sqlstat" != "00000"  -a  "$sqlstat" != "02000"  ]
then
  echo -e "\n===================================================================
=============">>sql.log
  echo -e "时间[`date "+%Y%m%d%T"`] : 请检查SQL语句是否正确执行......">>sql.log
  echo -e "SQL 语句 : [ "$1" ]\n\n执行情况 : [ "$SDATA" ]\n\n第二参数 : [ "$2" ]
">>sql.log
  echo -e "\n第二参数说明:">>sql.log
  echo -e "      =1 : 退出执行">>sql.log
  echo -e "      =0 : 继续执行">>sql.log
echo -e "=====================================================================
===========">>sql.log
  if [ $2 -ne 0 ];then
  exit 1
  fi
fi
}

我想这个对你一定有帮助,格式,你自己搞一搞

论坛徽章:
0
3 [报告]
发表于 2011-06-21 13:33 |只看该作者
回复 1# wyeyu520


    好像是你的变量赋值错了吧
  试试 csname=`db2 connect to icmnlsdb;db2 "select constname from syscat.references where tabname=SQL1209882"`

论坛徽章:
0
4 [报告]
发表于 2011-06-21 13:43 |只看该作者
回复 3# lionfun


    回复楼上大哥,我没看出来您写的和我写的第一条语句有什么区别啊。

   刚刚又试了一下,按您写的。报错如下:

   先列出了数据库connect的信息,然后紧接着又报connect is not exsit。

论坛徽章:
0
5 [报告]
发表于 2011-06-21 14:25 |只看该作者
回复 2# 红狐狸


    {:3_188:} 我这个菜鸟,还是没看懂您怎么赋值的

论坛徽章:
0
6 [报告]
发表于 2011-06-21 16:25 |只看该作者
刚刚修改了语句,如下:

csname=`(db2 connect to icmnlsdb);(db2 "select constname from syscat.references where tabname='SQL1209882'")

得到结果一堆数据库连接信息,后面跟了正确的constname,我想用awk把值取出来,在句尾增加了 | awk

结果还是不能过滤那一堆数据库连接信息,为啥啊?

论坛徽章:
0
7 [报告]
发表于 2011-06-22 10:20 |只看该作者
搞定了,找到论坛的一篇老帖子。更改后语句如下:
csname=`db2 connect to icmnlsdb>/dev/null;db2 "select constname from syscat.references where tabname='SQL1209882'" | awk '/SQL/{print $1}'

echo $csname
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP