问题:cobol-db2 程序已更改,以将变量的长度从 pic x(5) 增加到 pic x(8)。但是,程序的 sql 没有任何变化。如果程序的计划/包没有针对这些更改进行绑定,结果会怎样?
解决方案从 pic x(5) 到 pic x(8) 的可变长度更改为不是 db2 更改,并且程序中的 sql 语句不需要修改。但是,我们仍然需要绑定其计划/包,否则我们将收到 sql 错误代码 -818,其中指出“加载模块中的预编译器生成的时间戳 x 与从 dbrm z 构建的绑定时间戳 y 不同”。 p>
此 sql 错误的原因如下 - 在每次执行 cobol-db2 程序时,都会比较加载模块和包/dbrm 的时间戳。如果程序中变量的长度发生了变化(并且没有 sql 变化)并且被编译,那么加载模块将具有新生成的时间戳,另一方面,如果不执行 bind,则加载模块将具有新生成的时间戳。包/dbrm 将具有旧的时间戳。当执行该程序时,调用该程序的 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)/*
以上就是在没有bind的情况下,程序中进行非sql更改时,执行结果是什么?的详细内容。