有一个RPG程序A,需要传入参数运行的.其中有一个参数是数值型A1.另一个是字符型B1.
为什么在使用如下命令CALL A PARM(A1 'B') 时会发生 decimal-data error in field错误?
USING_AS400 回复于:2006-12-28 20:57:56
三种方法:
1.写个CL程序,大致如下
PGM
DCL VAR(V1) TYPE(*DEC) LENGTH(5 0)
CHGVAR VAR(V1) VALUE(12345)
CALL PGM(YOURRPG) PARM(V1 'B')
ENDPGM
2.把RPG参数定义成字符型的,然后在RPG里头在转换成数值型,那么在命令行CALL就没问题了
*ENTRY PLIST
PARM V1 5
PARM V2 1
MOVE V1 VV 5 0
3.在命令行直接输入,也可以,不过稍微有些复杂
输入格式与你定义的数值型变量长度有关,假如是偶数长度,比如说吧:
(1)有一个数值型6位长,你想输入的参数是20061229和B,那么传参应该是CALL PGM(YOURRPG) PARM(X'020061229F' 'B') ,F表示正的,前面需要补0;
(2)有一个数值型5位长,你想输入的参数是2006122和B,那么传参应该是CALL PGM(YOURRPG) PARM(X'20061229F' 'B') ,F表示正的,前面不需要补0
【注:一般格式是,偶数位长X'0nnnn……nnF',前面补0,;奇数位长X'nnn……nnF',前面不需要补0。后面一位表示符号,F表示整数,D表示负数】
[ 本帖最后由 USING_AS400 于 2006-12-28 20:59 编辑 ]
V01619 回复于:2006-12-29 08:57:28
不错,很管用.
USING_AS400 回复于:2006-12-29 21:45:39
再补充一下,传入的数值型还分P型和S型,如果是P型的,那么传入规则就如上第3点所述,
如果是S型,那么直接按字符型传入即可
如:
D V1 S 8S 0
*ENTRY PLIST
PARM V1
PARM V2 1
| 论坛热门帖子: | [lch203] 写得蛮好的linux学习笔记(10-21) [黑马制造] 学习java的30个目标(10-19) [笑傲股林] 做测试半年了,有点迷茫,应该再学些什么提高自己的测试水平和测试能力呢?(10-19) [udp8589] 大家用google的来吱一声? 用百度的~~也来报道下?(10-18) [沂偌掳兆] 本人总结的一些认为C++比较经典的书籍,希望对大家有用(10-18) |
| TAG标签: | 问题 参数 需要 输入 如果 表示 传递 方式 长度 parm2 |
注册
个人空间
