名词解释:什么是 Level Check
大家都遇到过这个问题。可是什么是LEVEL CHECK, 操作系统为什么要做LEVEL CHECK, 强制不做LEVEL CHECK又会怎样?那就不一定清楚啦。
一个高级语言使用文件,编译程序就给每个文件保留文件缓冲区。可以输入输出的文件有输入和输出两个缓冲区。
你读一条记录,记录就放读进缓冲区内,然后根据纪录的每个字段的定义,从固定的位置截取数据。
如果程序编译的时候,文件A有B, C两个字段,都是10A. 后来运行是,A, B的次序改变了,如果不做LEVEL CHECK,
那么程序中的变量A拿到的是文件中B的值,B拿到的是文件中A的值了。
如果A, B一个是数字形,一个是字符型,就回中DECIMAL DATA ERROR啦(见我前面的帖子介绍)。
那么系统是怎样做LEVEL CHECK呢,原来在编译文件时,IBM编译器用一种算法把每个字段考虑进去,算出一个一长串的所谓RECORD FORMAT IDENTIFIER. 你用DSPFFD就可以找到那个IDENTITIER.
编译高级语言程序时,编译时用到的文件的RECORD FORMAT IDENTIFIER会被CAPTURE在程序中。
我们可以用DSPPGMREF命令看到CAPTURE到的RECORD FORMAT IDENTIFIER.
程序运行时,程序对照编译时捕捉到的RECORD FORMAT IDENTITIER和实际打开文件的RECORD FORMAT IDENTIFIER. 如果有差异,就报LEVELCHECK ERROR啦!
要看程序根当前版本的数据库是否匹配,不需要运行,只要对比record format identifiers就可以了。
要比较两个文件的layout是否一致,也只要比较record format identifiers就可以了。
如果想比较一个产品软件不同版本的数据库做了哪些改变,绝对不需要把文件内的字段一个一个拿来比较。只要:
DSPFFD FILE(OLD_LIB/*ALL) OUTPUT(*OUTFILE) OUTFILE(MY_LIB/OLD_OUTFILE)
DSPFFD FILE(NEW_LIB/*ALL) OUTPUT(*OUTFILE) OUTFILE(MY_LIB/NEW_OUTFILE)
再比较同名文件的 WHSEQ 字段就可以了。
[ 本帖最后由 franliu 于 2009-11-27 17:28 编辑 ]
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
不错,,,,,
经常碰到这个问题,一直不明白为什么,现在终于知道了。谢谢
哦,曾经注意过,呵呵。复习了,哈哈