ปัญหา: โปรแกรม COBOL-DB2 ถูกเปลี่ยนเพื่อเพิ่มความยาวของตัวแปรจาก PIC X(5) เป็น PIC X(8) อย่างไรก็ตาม ไม่มีการเปลี่ยนแปลงใน SQL ของโปรแกรม จะเป็นอย่างไรหากแผน/แพ็คเกจของโปรแกรมไม่ถูกผูกมัดสำหรับการเปลี่ยนแปลงเหล่านี้?
วิธีแก้ปัญหา
การเปลี่ยนแปลงความยาวผันแปรจาก PIC X(5) เป็น PIC X(8) ไม่ใช่การเปลี่ยนแปลง DB2 และไม่มีการดัดแปลงที่จำเป็นสำหรับคำสั่ง SQL ในโปรแกรม อย่างไรก็ตาม เรายังจำเป็นต้องผูกแผน/แพ็คเกจ มิฉะนั้นเราจะได้รับรหัสข้อผิดพลาด SQL -818 ซึ่งระบุว่า “การประทับเวลาที่สร้างล่วงหน้าล่วงหน้า x ในโมดูลโหลดนั้นแตกต่างจากการประทับเวลาที่ผูก y สร้างจาก DBRM z”พี>
ต่อไปนี้เป็นสาเหตุของข้อผิดพลาด SQL - ในการเรียกใช้โปรแกรม COBOL-DB2 แต่ละครั้ง เวลาของโหลดโมดูลและแพ็คเกจ/DBRM จะถูกเปรียบเทียบ หากมีการเปลี่ยนแปลงในความยาวของตัวแปร (และไม่มีการเปลี่ยนแปลงของ SQL) ในโปรแกรมและคอมไพล์แล้ว โมดูลโหลดจะมีการประทับเวลาที่สร้างขึ้นใหม่ และในทางกลับกัน หากไม่ได้ดำเนินการ BIND package/DBRM จะมีการประทับเวลาแบบเก่า เมื่อโปรแกรมนี้ทำงาน ขั้นตอน JCL ที่เรียกโปรแกรมนี้จะล้มเหลวด้วยรหัสข้อผิดพลาด SQL -818
หากเรามีโปรแกรม COBOL-DB2 ซึ่งคำสั่ง SQL จะไม่เปลี่ยนแปลงอีกในอนาคต เราสามารถคอมไพล์โปรแกรมนี้ล่วงหน้าด้วยตัวเลือก LEVEL ด้านล่างนี้เป็นตัวอย่างของขั้นตอน BIND โดยใช้ตัวเลือก 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) /*