在没有BIND的程序中进行非SQL更改时,执行结果是什么?

问题:更改了COBOL-DB2程序以增加变量从PIC X(5)到PIC X(8)的长度。但是,该程序的SQL没有任何更改。如果程序的计划/软件包未绑定这些更改,结果将是什么?

从PIC X(5)到PIC X(8)的可变长度更改不是DB2更改,并且程序中的SQL语句不需要修改。但是,仍然需要绑定其PLAN / PACKAGE,否则我们将获得SQL错误代码-818,其中指出“加载模块中预编译器生成的时间戳x与绑定时间戳y和DBRM z生成的时间戳不同”。

以下是此SQL错误的原因-在每次执行COBOL-DB2程序时,都会比较装入模块和程序包/ DBRM的时间戳。如果程序中变量的长度发生变化(并且没有SQL更改)并被编译,则装入模块将具有新生成的时间戳,而如果未执行BIND,则将包/ DBRM将具有旧的时间戳。执行该程序时,调用该程序的JCL步骤将失败,并显示SQL错误代码-818。

如果我们有一个COBOL-DB2程序,其SQL语句将来将永远不会更改,则可以使用选项LEVEL对该程序进行预编译。下面是使用LEVEL选项的BIND步骤的示例。

示例

//绑定执行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)
/*
猜你喜欢