我试图运行在KornShell以下命令(KSH):

set -A INDEXES `db2 "describe indexes for table ${TABSCHEMA}.${TABNAME} show detail" | awk '{print $1"."$2}'`

什么我试图实现是放置在特定的表中的索引的列表到一个数组,我可以稍后遍历。

的问题是,当我运行上述命令的数组的内容与“SQL1024N”(其是告诉我,数据库连接不存在)。

的错误消息开始

然而,如果删除awk在语句的末尾为这样:

set -A INDEXES `db2 "describe indexes for table ${TABSCHEMA}.${TABNAME} show detail"`

它工作得很好(以及,在某种程度上它返回数据,很明显没有awk我不捕获正确的数据)。

有谁知道为什么awk是有这个影响?

我欣赏有拿到这个数据的方法不止一种,但它令我感到困惑,为什么发生这种情况。

预先感谢。

有帮助吗?

解决方案

在这种情况下,当DB2 CLP说,这是没有连接到数据库,这是因为外壳开辟了一个子过程,需要自己的专用db2bp后端进程,它不能访问的原壳打开连接处理。这并不是说事情正在变得断开,它是一个新创建的shell进程(及其伴随的db2bp过程)被创建,但没有被告知要连接到数据库。 一种方法来解决这个问题是明确地连接(或重新连接)到数据库中,当你知道你在这些情形之一是。

set -A INDEXES `db2 connect to watevrDB >/dev/null;db2 -x describe indexes for table ${TABSCHEMA}.${TABNAME} show detail | awk {'print $1"."$2'}`

我认识到,这个问题是更多的脚本和与DB2的awk大于约系统目录,否则我会推荐一些简单的目录查询以产生相同的结果。

其他提示

我怀疑它的AWK本身。也许DB2讲究标准输出连接到一个tty或控制台?或至少不喜欢时,它的连接到管道。

这是一个不寻常的,并且如佩斯说,它可能是一个db2夸克。

我看到类似的问题时,例如使用之前,DB2命令字符串,其中DB2不具有定义的数据库的时间或天美连接到

有是一个环境变量DB2DBDFT其设定为隐式连接的缺省数据库。我很抱歉地说,我不知道,如果这个变量是提供给非DBA用户(假设你是一名应用开发者)。这是值得研究如果通过设置此变量:

的db2set DB2DBDFT = $ {your_db_name}

和重试查询。

如果您有多个数据库环境可以连接到你可以取消设置DB2DBDFT变量,一旦你完成你的工作。

尝试与-x开关db2命令:

... db2 **-x** "describe indexes for table ${TABSCHEMA}.${TABNAME} show detail"

我已经在那里这已经治好了我的无能管道输出到awk的实例。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top