Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Kết quả thực thi khi thay đổi không phải SQL mà không BIND lại

Vấn đề: Chương trình COBOL-DB2 thay đổi độ dài biến từ PIC X(5) thành PIC X(8). Không có thay đổi nào trong câu lệnh SQL. Kết quả sẽ như thế nào nếu không BIND lại plan/package?

Giải pháp

Việc thay đổi độ dài biến không phải là thay đổi DB2 và không yêu cầu sửa đổi SQL. Tuy nhiên, vẫn cần BIND lại PLAN/PACKAGE, nếu không sẽ gặp lỗi SQL -818: "THE PRECOMPILER-GENERATED TIMESTAMP x IN THE LOAD MODULE IS DIFFERENT FROM THE BIND TIMESTAMP y BUILT FROM THE DBRM z".

Nguyên nhân: Mỗi lần thực thi chương trình COBOL-DB2, timestamp của load module và package/DBRM được so sánh. Nếu chương trình được compile lại (timestamp mới) mà không BIND (timestamp cũ), bước JCL gọi chương trình sẽ thất bại với SQLCODE -818.

Nếu chương trình COBOL-DB2 không bao giờ thay đổi SQL trong tương lai, có thể pre-compile với tùy chọn LEVEL. Ví dụ bước BIND dùng 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)
/*