因为在AS400中数据都是以十六进制形式存在的,程序执行时也是以十六进制的形式,所以在命令行call一个程序不管实参类型是什么,只用你知道它的十六制是什么就能使call时参数不会有问题(这里主要是以P/S类型为主,因为传递字符时系统会自动将字符转换成十六进制)。
例如 1:
PGM_NAME: PGM1
.....
c *ENTRY PLIST
PARM P1 1 0
PARM P2 2
......
那么在命令行上执行:call pgm(pgm1) parm(9 '22')时会发现自己没有将9传给p1,
而在命令行上执行:call pgm(pgm1) parm(X'9F' '22')时会发现自己现在就可以将9传给p1。
例如 2:
PGM_NAME: PGM2
DP1 S 2S 0
.....
c *ENTRY PLIST
c PARM P1
............
那么在命令行上执行:call pgm(pgm1) parm(99 '22')时会发现自己没有将99传给p1,
而在命令行上执行:call pgm(pgm1) parm(X'F9F9' '22')时会发现自己现在就可以将99传给p1。
例如 3:
PGM_NAME: PGM1
.....
c *ENTRY PLIST
PARM P1 2 1
PARM P2 2
......
那么在命令行上执行:call pgm(pgm1) parm(9.9 '22')时会发现自己没有将9传给p1,
而在命令行上执行:call pgm(pgm1) parm(X'099F' '22')时会发现自己现在就可以将9.9传给p1。(因为该变量有一个区位和三个数字为).
例如 4:
PGM_NAME: PGM1
.....
dp1 s 2s 1
c *ENTRY PLIST
PARM P1
PARM P2 2
......
那么在命令行上执行:call pgm(pgm1) parm(9.9 '22')时会发现自己没有将9传给p1,
而在命令行上执行:call pgm(pgm1) parm(X'9F9F' '22')时会发现自己现在就可以将9.9传给p1。
这里说明AS400上压缩数据和非压缩数据变量当参数是传递参数时数据表示是不一样的。(注:使用程序和程序之间的调用就不存在表示法,因为系统自动对它们进行了数据的格式规定)。
阅读(2924) | 评论(2) | 转发(0) |