समस्या: एक COBOL-DB2 प्रोग्राम को PIC X(5) से PIC X(8) तक एक वेरिएबल की लंबाई बढ़ाने के लिए बदला गया है। हालाँकि, प्रोग्राम के SQL में कोई परिवर्तन नहीं हैं। यदि कार्यक्रम की योजना/पैकेज इन परिवर्तनों के लिए बाध्य नहीं है तो परिणाम क्या होगा?
समाधान
PIC X(5) से PIC X(8) में परिवर्तनशील लंबाई परिवर्तन DB2 परिवर्तन नहीं है और प्रोग्राम में SQL कथनों के लिए किसी संशोधन की आवश्यकता नहीं है। हालाँकि, फिर भी हमें इसकी योजना/पैकेज को बाइंड करने की आवश्यकता है अन्यथा हमें SQL त्रुटि कोड -818 मिलेगा जिसमें कहा गया है कि "लोड मॉड्यूल में प्रीकंपाइलर-जेनरेटेड टाइमस्टैम्प x बाइंड टाइमस्टैम्प से अलग है और डीबीआरएम जेड से बनाया गया है"।पी>
इस SQL त्रुटि का कारण निम्नलिखित है - COBOL-DB2 प्रोग्राम के प्रत्येक निष्पादन में, लोड मॉड्यूल और पैकेज/DBRM के टाइमस्टैम्प की तुलना की जाती है। यदि प्रोग्राम में चर की लंबाई में कोई परिवर्तन होता है (और कोई SQL परिवर्तन नहीं होते हैं) और इसे संकलित किया जाता है, तो लोड मॉड्यूल में नया उत्पन्न टाइमस्टैम्प होगा और दूसरी ओर यदि BIND का प्रदर्शन नहीं किया जाता है, तो पैकेज/डीबीआरएम में पुराना टाइमस्टैम्प होगा। जब यह प्रोग्राम निष्पादित होता है, तो इस प्रोग्राम को कॉल करने वाला 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) /*