Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1010929
  • 博文数量: 125
  • 博客积分: 10490
  • 博客等级: 上将
  • 技术积分: 2385
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-03 18:26
文章分类

全部博文(125)

文章存档

2011年(1)

2010年(9)

2009年(17)

2008年(98)

分类:

2008-11-19 12:44:03

   因为在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上压缩数据和非压缩数据变量当参数是传递参数时数据表示是不一样的。(注:使用程序和程序之间的调用就不存在表示法,因为系统自动对它们进行了数据的格式规定)。
 
阅读(3178) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~