首頁  >  文章  >  資料庫  >  在沒有BIND的情況下,程式中進行非SQL變更時,執行結果是什麼?

在沒有BIND的情況下,程式中進行非SQL變更時,執行結果是什麼?

WBOY
WBOY轉載
2023-09-06 15:05:02869瀏覽

在沒有BIND的情況下,程式中進行非SQL變更時,執行結果是什麼?

問題: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中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除