在程式中進行非SQL更改時,如果未進行BIND,執行結果是什麼?


問題:一個 COBOL-DB2 程式修改了變數長度,從 PIC X(5) 增加到 PIC X(8)。但是,程式的 SQL 部分沒有變化。如果程式的計劃/包沒有針對這些更改進行繫結,結果會怎樣?

解決方案

變數長度從 PIC X(5) 更改為 PIC X(8) 不是 DB2 更改,程式中的 SQL 語句不需要修改。但是,我們仍然需要繫結其計劃/包,否則我們將得到 SQL 錯誤程式碼 -818,該程式碼表示“載入模組中的預編譯器生成的 TIMESTAMP x 與從 DBRM z 生成的繫結 TIMESTAMP y 不同”。

此 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)
/*

更新於:2020年12月1日

191 次檢視

啟動您的職業生涯

完成課程獲得認證

開始
廣告