समस्या
COBOL-DB2 प्रोग्राम में वेरिएबल लंबाई PIC X(5) से PIC X(8) बदली गई, लेकिन SQL में कोई परिवर्तन नहीं। प्लान/पैकेज को पुनः BIND नहीं किया गया।
परिणाम
एक्सीक्यूशन पर SQLCODE -818 आएगा:
"THE PRECOMPILER-GENERATED TIMESTAMP x IN THE LOAD MODULE IS DIFFERENT FROM THE BIND TIMESTAMP y BUILT FROM THE DBRM z"
कारण
- कंपाइल पर लोड मॉड्यूल में नया टाइमस्टैम्प जनरेट होता है।
- BIND न करने पर DBRM/पैकेज में पुराना टाइमस्टैम्प रहता है।
- रनटाइम पर दोनों टाइमस्टैम्प मिलान न होने पर -818 एरर।
समाधान: LEVEL ऑप्शन के साथ BIND
यदि SQL कभी नहीं बदलेगा, तो प्री-कंपाइल में LEVEL ऑप्शन उपयोग करें:
//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) /*
नोट: LEVEL से टाइमस्टैम्प मिलान बायपास होता है (केवल तब जब SQL अपरिवर्तित हो)।