**问题**
**提问** :AS400 调用RPG程序时,数字参数如何传送?
首先,简单介绍一下AS400和RPG。
AS/400( iSeries) 是当今世界上最流行的中小型、多用户商业计算机系统,在多用户服务器领域里,始终保持着最畅销的地位。AS/400
在全球的装机量已超过 75 万套,覆盖 150 多个国家,支持 40 多种语言,有近 1 万个商业伙伴和独立软件商, 3
万多个商业应用。广泛应用于流通、金融证券、制造、运输,安防等各个行业。
RPG (Report program generator报表程序生成器)
IBM的AS/400小型机上的高级语言(REPORT PROGRAM GENERATOR),程序运行效率很高,是AS/400(
iSeries)操作系统上非常流行的编程语言。RPG IV(也称为ILE RPG)是RPG的最新版本,它是一种为AS400
RPG程序员提供高度启用编程环境的工具。
**答案**
AS400 调用RPG程序时,数字参数都是以P类型传送。
数据类型:压缩十进制(P)
有效长度:1-31位数字
占有的存贮字节数:(数字的个数/2)+1(取整)
※系统执行算术操作时,使用压缩十进制效率高,占用空间小。
设程序 TESTPGMA 有参数 PARM1, PARM2
**传递参数为奇数** :
1\. PARM1 (9P 0) = 1234, PARM2(9P 2) = 56.78
传递方式:CALL TESTPGMA PARM( X'000001234F' X'000005678F')
实行结果:
2\. PARM1 (9P 0) = -3456, PARM2(9P 2) = -77.88
传递方式:CALL TESTPGMA PARM( X'000003456B' X'000007788B')
实行结果:
**传递参数为偶数** :
3\. PARM1 (8P 0) = 9876, PARM2(8P 2) = 11.22
传递方式:CALL TESTPGMA PARM( X'F00009876F' X'F00001122F')
实行结果:
4\. PARM1 (8P 0) = -5566, PARM2(8P 2) = -33.44
传递方式:CALL TESTPGMA PARM( X'F00005566B' X'F00003344B')
实行结果:
**总结** :对于P类型的参数,需要在字符串前加 X。如果长度为奇数,字符串后缀加 F ;如果长度为偶数,字符串的前后缀都加
F。如果传递参数是负数,字符串后缀应由F变为B。(X表示按16进制取值,由于P类型的数据存储方式是半个字节存储一个数字,所以需要在前后加其它的字母补齐空位。)
【END】
作者:蒋林杰
审核:梁 超
编辑:王 锐