問題:COBOL-DB2 程式已更改,以將變數的長度從 PIC X(5) 增加到 PIC X(8)。但是,程式的 SQL 沒有任何變化。如果程式的計畫/套件沒有針對這些變更進行綁定,結果會怎麼樣?
從 PIC X(5) 到 PIC X(8) 的可變長度更改為不是 DB2 更改,且程式中的 SQL 語句不需要修改。但是,我們仍然需要綁定其計劃/包,否則我們將收到SQL 錯誤代碼-818,其中指出「載入模組中的預編譯器產生的時間戳x 與從DBRM z 建置的綁定時間戳y 不同」。 p>
此 SQL 錯誤的原因如下 - 在每次執行 COBOL-DB2 程式時,都會比較載入模組和套件/DBRM 的時間戳記。如果程式中變數的長度發生了變化(並且沒有 SQL 變化)並且被編譯,那麼載入模組將具有新產生的時間戳,另一方面,如果不執行 BIND,則載入模組將具有新產生的時間戳。包/DBRM 將具有舊的時間戳記。執行程式時,呼叫程式的 JCL 步驟將會失敗,並顯示 SQL 錯誤代碼 -818。
如果我們有 COBOL-DB2 程序,其 SQL 語句將來永遠不會更改,我們可以使用選項 LEVEL 預編譯該程式。以下是使用 LEVEL 選項的 BIND 步驟的範例。
//BIND EXEC PGM=IKJEFT01 //STEPLIB DD DSN=DIS.TEST.LOADLIB,DISP=SHR //SYSOUT DD SYSOUT=* //SYSTSIN DD * DSN SYSTEM(TB3) BIND PLAN(PLANA) - PKLIST(PACKA) - LEVEL - ACQUIRE(ALLOCATE) - ISOLATION (RS) /*
以上是在沒有BIND的情況下,程式中進行非SQL變更時,執行結果是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!