問(wèn)題:COBOL-DB2 程序已更改,以將變量的長(zhǎng)度從 PIC X(5) 增加到 PIC X(8)。但是,程序的 SQL 沒(méi)有任何變化。如果程序的計(jì)劃/包沒(méi)有針對(duì)這些更改進(jìn)行綁定,結(jié)果會(huì)怎樣?
解決方案
從 PIC X(5) 到 PIC X(8) 的可變長(zhǎng)度更改為不是 DB2 更改,并且程序中的 SQL 語(yǔ)句不需要修改。但是,我們?nèi)匀恍枰壎ㄆ溆?jì)劃/包,否則我們將收到 SQL 錯(cuò)誤代碼 -818,其中指出“加載模塊中的預(yù)編譯器生成的時(shí)間戳 x 與從 DBRM z 構(gòu)建的綁定時(shí)間戳 y 不同”。 p>
此 SQL 錯(cuò)誤的原因如下 – 在每次執(zhí)行 COBOL-DB2 程序時(shí),都會(huì)比較加載模塊和包/DBRM 的時(shí)間戳。如果程序中變量的長(zhǎng)度發(fā)生了變化(并且沒(méi)有 SQL 變化)并且被編譯,那么加載模塊將具有新生成的時(shí)間戳,另一方面,如果不執(zhí)行 BIND,則加載模塊將具有新生成的時(shí)間戳。包/DBRM 將具有舊的時(shí)間戳。當(dāng)執(zhí)行該程序時(shí),調(diào)用該程序的 JCL 步驟將失敗,并顯示 SQL 錯(cuò)誤代碼 -818。
如果我們有一個(gè) COBOL-DB2 程序,其 SQL 語(yǔ)句將來(lái)永遠(yuǎn)不會(huì)更改,我們可以使用選項(xiàng) LEVEL 預(yù)編譯該程序。下面是使用 LEVEL 選項(xiàng)的 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) /*
登錄后復(fù)制
以上就是在沒(méi)有BIND的情況下,程序中進(jìn)行非SQL更改時(shí),執(zhí)行結(jié)果是什么?的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注www.92cms.cn其它相關(guān)文章!