2014-10-18 44 views
0

我最近一直面臨這樣的問題:SQLCBLLE無法正常運行,並且不會產生MSGW

normaly時,有對批處理作業運行的PGM ILE COBOL在IBM i系列(AS/400),並觸發exeption它使批處理作業停止並從RUN轉到MSGW,但是當它是SQLCBLLE並且執行sql語句時出現問題時,它會簡單回滾並繼續執行,而不會將作業傳遞給MSGW。

有沒有辦法知道批處理作業中的sqlcblle是否未正確執行,以及是否有可能觸發批處理作業的MSGW並讓默認錯誤處理程序獲取它們?

+0

''有沒有辦法知道......「'是的,知道的方法取決於你如何編寫程序,而且問題是什麼。除非我們知道所問的問題種類以及相關代碼的外觀,否則可能性太大。 – user2338816 2014-10-19 02:05:11

+0

我的問題是,我沒有權限編輯pgms並重新編譯!批量運行sqlcblle pgm(sbmjob)時,批處理作業正常執行,並且不會記錄任何日誌,因此,即使pgm中的sql查詢返回錯誤,它也不會按照假設運行,只是跳過其餘代碼!但是,當pgm在cobol中時,作業會從狀態運行轉變爲msgw,等待用戶響應!我需要對sqlcblle pgm有相同的行爲!其實我正在使用的方法是檢查時間執行,以確保批處理運行,如果一個sqlcblle正常需要30分鐘,一天 – hamzahir 2014-10-19 02:23:32

+0

需要2-3分鐘。這不是一個可靠的方法!什麼是正確的方法? – hamzahir 2014-10-19 02:24:15

回答

2

每個SQL語句後都應該跟一個測試,它會檢查SQLSTATE(或可能是SQLCODE)以查看SQL是否成功。根據SQLSTATE(或可能是SQLCODE)值,程序需要決定採取什麼操作。

該操作可以發送* INQ消息將作業置於MSGW狀態,直到返回答覆。

沒有看到導致問題的代碼,很難說更多。無論是否存在tableA,諸如exec sql select * from tableA之類的陳述都不存在指定列列表的潛在重大問題。嵌入式SQL通常不會導致返回異常,但會使用SQLSTATE來描述問題。開發者有責任檢查返回的條件。

+0

感謝您的回答。那麼使用CL命令檢查sqlcblle日誌是沒有辦法的?你可以發佈一些鏈接到引用處理SQLSTATE內部的pgm嗎? – hamzahir 2014-10-19 10:17:15

+1

您可以使用CL檢查SQL結果_if程序使結果可用_。如果開發人員僅僅放棄了SQL問題,那麼問題信息就消失了。信息中心中的[* SQL消息和代碼*](http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_61/rzala/rzalakickoff.htm?lang=en)主題具有關於信息中心的所有知識從SQL返回信號。 [*嵌入式SQL編程*](http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_61/rzajp/rzajpkickoff.htm?lang=en)主題具有多種編程語言的編碼示例。 – user2338816 2014-10-19 12:33:50

+0

請注意,它不只是「SQL」程序。許多開發人員忽略來自SQL的錯誤指示。這是同樣的問題;只是不同的編碼。 – user2338816 2014-10-19 12:36:34

0

有一個有趣的討論,可能有幫助here。這是關於RPG而不是CBL,但可能有助於解決您的問題。