如何使用operator for filter子句?

时间:2012-11-20 03:14:48

标签: ibm-mq mq

我知道我们可以使用where filter来帮助您在运行 runmqsc 期间获得更具体的结果。我对LT、GT、EQ、NE、LE and GE等运营商没有任何问题。但是,与LK、NL一样,它总是失败。请参阅以下详细信息:

dis chl(SERVER.C01)
27 : dis chl(SERVER.C01)
AMQ8414: 显示通道细节。
 CHANNEL(SERVER.C01)                     CHLTYPE(SVRCONN)
 ALTDATE(2012-08-27)                     ALTTIME(16.05.40)
 COMPHDR(NONE)                           COMPMSG(NONE)
 DESCR( )                                HBINT(300)
 KAINT(AUTO)                             MAXINST(999999999)
 MAXINSTC(999999999)                     MAXMSGL(4194304)
 MCAUSER( )                              MONCHL(QMGR)
 RCVDATA( )                              RCVEXIT( )
 SCYDATA( )                              SCYEXIT( )
 SENDDATA( )                             SENDEXIT( )
 SHARECNV(10)                            SSLCAUTH(REQUIRED)
 SSLCIPH( )                              SSLPEER( )
 TRPTYPE(TCP)
dis chl(*) where(type lk SVRC*)
  28 : dis chl(*) where(chltype lk SVRC*)
 AMQ8569: 过滤器规范中的错误
 dis chl(*) where(chltype lk SVRC*

 AMQ8427: MQSC 命令的有效语法为:

 DISPLAY display_cmd
 WHERE( filter_keyword operator filter_value )

 operator := [ LT | GT | EQ | NE | LE | GE | CT | EX | LK | NL | CTG | EXG ]

另外,CT and EX怎么样?请帮帮我

WebSphere MQ
7.0.1.9

由于

1 个答案:

答案 0 :(得分:2)

目前尚不清楚您是否遇到其他对象类型的问题,但对于频道,不允许基于频道类型进行过滤。这可能是因为无论如何都始终支持按类型进行选择。只需在display命令中指定TYPECHLTYPE

dis chl(*) chltype(svrconn)
     1 : dis chl(*) chltype(svrconn)
AMQ8414: Display Channel details.
   CHANNEL(SYSTEM.AUTO.SVRCONN)            CHLTYPE(SVRCONN)
AMQ8414: Display Channel details.
   CHANNEL(SYSTEM.DEF.SVRCONN)             CHLTYPE(SVRCONN)
dis chl(*) type(svrconn)
     2 : dis chl(*) type(svrconn)
AMQ8414: Display Channel details.
   CHANNEL(SYSTEM.AUTO.SVRCONN)            CHLTYPE(SVRCONN)
AMQ8414: Display Channel details.
   CHANNEL(SYSTEM.DEF.SVRCONN)             CHLTYPE(SVRCONN)

DISPLAY CHANNEL州的信息中心页面:

  

几乎所有可用于显示此属性的参数   DISPLAY命令。但是,您不能使用CMDSCOPE,QSGDISP或   MCANAME参数作为过滤关键字。你不能使用TYPE(或   CHLTYPE)如果它也用于选择频道。

我不确定如何使用TYPECHLTYPE 其他,而不是选择频道,我已要求对页面进行说明以解释这一点。在此期间,请注意使用TYPE子句不支持CHLTYPEWHERE上的选择。是否存在您在使用LKNK时遇到问题的频道以外的情况?

<强>更新
回应评论,有两点需要注意。首先,根据信息中心,“您不能对具有数值或具有一组值的参数使用通用过滤器值。”这意味着,例如,指定DIS CHL(*) WHERE(MCATYPE LK P*)无效,因为MCATYPE由一组值中的一个指定。它只能是PROCESSTHREAD。指定DIS CHL(*) WHERE(LONGTMR LK 1*)也不是有效的,因为LONGTMR采用数值。

第二个感兴趣的项目是WHERE子句中引用的语法。与所有MQSC参数一样,WHERE子句将未加引号的值折叠为UPPER CASE。由于WebSphere MQ以区分大小写的方式评估这些,因此DIS Q(*) WHERE(DESCR LK W*)之类的工作正常,因为许多队列的描述以WebSphere开头,大写W匹配。但是,DIS Q(*) WHERE(DESCR LK We*)失败,因为小写e折叠为大写,然后与描述字段中的值不匹配。这里的工作是DIS Q(*) WHERE(DESCR LK 'We*'),其中字符串说明符是单引号。

因此,您看到的问题可能是由于LK运算符对作为枚举一部分的字符串值的使用,或者可能是由于区分大小写无法匹配未加引号的过滤器值。

CTCTG及其补语是filter关键字为列表时使用的运算符。例如,在NAMELIST对象中,属性NAMES包含值列表。 WHERE(NAMES LK SYS*)之类的内容会模棱两可,因为LK对一元值进行操作。因此,CTCTG作为运算符提供。然后用几个例子演示这种语法:

DIS NAMELIST(*) WHERE(NAMES CT SYSTEM.BROKER.DEFAULT.STREAM)
DIS NAMELIST(*) WHERE(NAMES CTG SYS*)

第一个显示NAMELIST属性中的一个条目与NAMES属性完全匹配的{{1}}个对象。第二个允许基于通用字符串前缀的类似匹配。如果预期值不是所有UPPER CASE,或者值包含嵌入空间,请务必引用。