求COBOL技术大神指点

[复制链接]
查看11 | 回复9 | 2013-2-25 14:51:24 | 显示全部楼层 |阅读模式
求COBOL技术大神指点
001830 01BGDF-RECORD-AREA.
001840 COPY BGDFMAST IN LIBRYMIS.
001910 01GL-PASSALONG.
001920 COPY GLPASSWS IN LIBRYGEN.
程序中把一个长度大于 BGDF-RECORD-AREA的变量赋值给了 BGDF-RECORD-AREA,这样会影响到GL-PASSALONG的值吗?
我认为是不会影响的,因为BGDF-RECORD-AREA和GL-PASSALONG都是01层,但是用debug工具查看GL-PASSALONG的值确实不影响了,所以有点困惑。。

回复

使用道具 举报

千问 | 2013-2-25 14:51:24 | 显示全部楼层
自己顶下,忘记说了,是在小型机上的。
回复

使用道具 举报

千问 | 2013-2-25 14:51:24 | 显示全部楼层
cobol内存处理在主机和小型机上是不一样的。
按照我以前的经验,主机上不影响,小型机上影响的。
以前我们做主机往小型机迁移的时候,处理了很多这样的问题。我们以前是IBM cobol,不知道你的是什么cobol。
回复

使用道具 举报

千问 | 2013-2-25 14:51:24 | 显示全部楼层
代码贴全看看
回复

使用道具 举报

千问 | 2013-2-25 14:51:24 | 显示全部楼层
代码就是:
主程序中定义两个01层:
001770 WORKING-STORAGE SECTION.
001830 01BGDF-RECORD-AREA.
001840 COPY BGDFMAST IN LIBRYMIS.----备注:此copy book里是03层的
001910 01GL-PASSALONG.
001920 COPY GLPASSWS IN LIBRYGEN. ----备注:此copy book里也是03层的
001930*
调用DBIO程序(一个DB2的封装程序)
SQ1027 CALL DBIOMODNAMEUSING DBIOMOD-FILE
SQ1027
DBIOMOD-KEY
SQ1027
BGDF-RECORD-AREA
SQ1027
DBIOMOD-FUNCTION
SQ1027
DBIOMOD-KEY-NO
SQ1027
DBIOMOD-RELEASE-LOCK
SQ1027
DBIOMOD-ACCESS-COMMAND
SQ1027
DBIOMOD-ACCESS-COND
SQ1027
DBIOMOD-STATUS.
在子程序DBIOMODNAME中,会将一个长度比BGDF-RECORD-AREA大11的变量赋值给BGDF-RECORD-AREA,
所以返回的时候BGDF-RECORD-AREA想对应的内存空间后面多了11个长度的值。
debug看了下,两个01层的地址相差了6个空间,也就是两个01层是不连续的,但也是紧挨着的,所以BGDF-RECORD-AREA后的01层变量被这11个内存值覆盖了。
不知道在小机上01层之间一定会是有6个空间的间隔,并且01层与01层时有影响的?
回复

使用道具 举报

千问 | 2013-2-25 14:51:24 | 显示全部楼层
TATA?
回复

使用道具 举报

千问 | 2013-2-25 14:51:24 | 显示全部楼层
同道中人?
回复

使用道具 举报

千问 | 2013-2-25 14:51:24 | 显示全部楼层
yubinmi 发表于 2013-2-7 09:56
同道中人?

呵呵 做的系统是一样的
回复

使用道具 举报

千问 | 2013-2-25 14:51:24 | 显示全部楼层
影响。
回复

使用道具 举报

千问 | 2013-2-25 14:51:24 | 显示全部楼层
看你在子程序里面是怎么对这一变量赋值,直接move应该没有影响,cobol会自己截取,如果是用set address 来的会影响。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行