Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ผลการดำเนินการเมื่อทำการเปลี่ยนแปลงที่ไม่ใช่ SQL ในโปรแกรมโดยไม่มี BIND คืออะไร


ปัญหา: โปรแกรม 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)
/*