使用 grep 时的数据库连接范围
Database connect scope when using grep
正在尝试从数据库中获取 2 个字符的版本 table sysibm.sysversions。这是独立工作的:
db2 -x "select versionnumber from sysibm.sysversions where UPPER(authid) = UPPER('db2dev')" | sed 's/^[[:blank:]]*//;s/[[:blank:]]*$//' | head -c2
这给出了结果:
11
尝试将其合并到脚本中会产生奇怪的结果
db2 connect to sample
_dbversion=$(db2 -x "select versionnumber from sysibm.sysversions where UPPER(authid) = UPPER('${_dbuser}')" | sed 's/^[[:blank:]]*//;s/[[:blank:]]*$//')
echo -e "${_dbversion}"
这会导致连接错误
SQL1024N A database connection does not exist. SQLSTATE=08003
我可以通过在 select
之外执行 grep 来解决这个问题
db2 连接到样本
_dbversion=$(db2 -x "select versionnumber from sysibm.sysversions where UPPER(authid) = UPPER('${_dbuser}')")
_dbversion_head=$(echo -e ${_dbversion1} | sed 's/^[[:blank:]]*//;s/[[:blank:]]*$//' | head -c2)
echo -e "${_dbversion_head}"
或括号内连接
_dbversion=$(db2 -x connect to sample; db2 -x "select versionnumber from sysibm.sysversions where UPPER(authid) = UPPER('${_dbuser}')" | sed 's/^[[:blank:]]*//;s/[[:blank:]]*$//' | head -c2)
使用 grep/sed 时是否可以扩展连接范围?
获取版本号还有两种方法:
db2pd -v
db2level
- 请参阅此处 https://www.ibm.com/support/knowledgecenter/SSEPGG_11.1.0/com.ibm.db2.luw.admin.trb.doc/doc/c0020806.html
我建议使用它,因为它们占用的资源更少。
管道导致 db2 -x "select..."
在子 shell 中执行,而连接保持在父 shell 的本地。
您可以简单地将 connect
和 select
放入一个文件(甚至是此处的文档)中 运行 它们作为脚本,从而保证两者在同一个文件中执行会话:
db2 -x <<EOF | sed -e ...
connect to yourdb
select versionnumber ...
EOF
另见 。
正在尝试从数据库中获取 2 个字符的版本 table sysibm.sysversions。这是独立工作的:
db2 -x "select versionnumber from sysibm.sysversions where UPPER(authid) = UPPER('db2dev')" | sed 's/^[[:blank:]]*//;s/[[:blank:]]*$//' | head -c2
这给出了结果:
11
尝试将其合并到脚本中会产生奇怪的结果
db2 connect to sample
_dbversion=$(db2 -x "select versionnumber from sysibm.sysversions where UPPER(authid) = UPPER('${_dbuser}')" | sed 's/^[[:blank:]]*//;s/[[:blank:]]*$//')
echo -e "${_dbversion}"
这会导致连接错误
SQL1024N A database connection does not exist. SQLSTATE=08003
我可以通过在 select
之外执行 grep 来解决这个问题db2 连接到样本
_dbversion=$(db2 -x "select versionnumber from sysibm.sysversions where UPPER(authid) = UPPER('${_dbuser}')")
_dbversion_head=$(echo -e ${_dbversion1} | sed 's/^[[:blank:]]*//;s/[[:blank:]]*$//' | head -c2)
echo -e "${_dbversion_head}"
或括号内连接
_dbversion=$(db2 -x connect to sample; db2 -x "select versionnumber from sysibm.sysversions where UPPER(authid) = UPPER('${_dbuser}')" | sed 's/^[[:blank:]]*//;s/[[:blank:]]*$//' | head -c2)
使用 grep/sed 时是否可以扩展连接范围?
获取版本号还有两种方法:
db2pd -v
db2level
- 请参阅此处 https://www.ibm.com/support/knowledgecenter/SSEPGG_11.1.0/com.ibm.db2.luw.admin.trb.doc/doc/c0020806.html
我建议使用它,因为它们占用的资源更少。
管道导致 db2 -x "select..."
在子 shell 中执行,而连接保持在父 shell 的本地。
您可以简单地将 connect
和 select
放入一个文件(甚至是此处的文档)中 运行 它们作为脚本,从而保证两者在同一个文件中执行会话:
db2 -x <<EOF | sed -e ...
connect to yourdb
select versionnumber ...
EOF
另见