2012-11-20 71 views
1

我知道我們可以利用where filter來幫助在運行期間獲得更具體的結果runmqsc。我對LT、GT、EQ、NE、LE and GE等運營商沒有任何問題。但是,與LK、NL一樣,它總是失敗。請看詳細如下:如何使用運算符來篩選where子句?

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 

感謝

回答

2

你是否有這個問題與其他對象類型目前尚不清楚,但作爲渠道,基於信道類型的過濾是不允許的。這可能是因爲按類型選擇總是受到支持。只是在顯示命令中指定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其他比選擇通道,我已經要求對頁面進行解釋,澄清。同時請注意,使用WHERE子句不支持TYPECHLTYPE上的選擇。您是否遇到過除LKNK之外的渠道?

UPDATE
迴應評論時,有兩點需要注意。首先,根據Infocenter的說法,「您不能使用具有數值的參數或具有一組值的參數的通用過濾器值。」這意味着,例如,指定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

呃....說實話,我只是想嘗試使用運營商LK,NL,CT和EX。所以我在上面的例子中隨機選擇了屬性CHLTYPE,沒什麼特別的。羅布,你能給我一些實際使用的操作員LK和CT嗎? – wing2ofsky

+0

這正是我需要的,你的解釋非常清楚。非常感謝Rob – wing2ofsky

+0

很高興幫助!老實說,我學到了一些新的研究,所以這個問題非常感謝。以前從未使用CT或CTG。 –