名词解释:什么是 Level Check

发布于 2022-08-24 03:55:18 字数 1261 浏览 9 评论 3

大家都遇到过这个问题。可是什么是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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

岁吢 2022-09-01 13:42:49

不错,,,,,

你不是我要的菜∠ 2022-08-28 22:36:46

经常碰到这个问题,一直不明白为什么,现在终于知道了。谢谢

凉薄对峙 2022-08-28 20:59:58

哦,曾经注意过,呵呵。复习了,哈哈

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文