【转】ABAP using 和 changing 的使用方法

    技术2025-11-09  11

    【文章转自】 http://veii.javaeye.com/blog/781613

    在ABAP/4中参数的传递可分成 1. Call By Reference: 传参数时将资料的存放地址(address)传至参数中, 也就是子程序中的参数变量与外部实际变量共享地址内的值, 又称为 Call By Address, 若在子程序中地址中的值改变了, 外部实际变量的值也会跟着改变.     语法:       PERFORM  <subr>  [USING <f1> <f2>…] [CHANGING <f1>…]       FORM  <subr>  [USING <f1> <f2>…] [CHANGING <f1>…]       Using 之后接在子程序中不会改变的变量, CHANGING接会改变值的变量       但实际上USING之后的参数在子程序中也可将值改变       Example:         SUM = 0.         NUM1 = 100.  NUM2=200.         PERFORM  ADD  USING  NUM1  NUM2  CHANGING  SUM.         WRITE: / NUM1,NUM2,SUM  “SUM 由 0 变成 300         FORM  ADD  USING  NUM1  NUM2  CHANGING  SUM.            SUM  =  NUM1  +  NUM2.         ENDFORM.     执行结果: 100   200   300 2. Call By Value 传参数时将数据的值复制一份至另一地址中, 所以在子程序中参数变量值改变, 并不会影响外部实际变量的值.     语法:       PERFORM  <subr>  USING  <f1>        FORM  <subr>  USING  VALUE(<f1>…)       使用 VALUE(<f1>)表示 <f1>是 Call By Value的传递             Example:         SUM = 0.         NUM1 = 5.         PERFORM  MULTI  USING  NUM1  CHANGING  SUM.         WRITE: / NUM1,SUM  “NUM1值还是5,  SUM 由 0 变成 120         FORM  MULTI  USING  VALUE(NUM1)  CHANGING  SUM.            SUM = 1.            WHILE  NUM1 > 1              SUM  =  SUM * NUM1.              NUM1 = NUM1 – 1.            ENDWHILE.         ENDFORM.     执行结果: 5   120 3. Call By Value and Return Result 传入参数值的方式同Call By Value, 但在子程序结束执行时会将传入的参数值复制一份传回给外部实际变量.     语法:       PERFORM  …. CHANGING …. <f1>       FORM  ….. CHANGING  VALUE(<f1>)       Example:         SUM = 0.         NUM1 = 100.  NUM2=200.         PERFORM  ADD  USING  NUM1  NUM2  CHANGING  SUM.         WRITE: / NUM1,NUM2,SUM     “SUM 由 0 变成 300         FORM  ADD  USING  NUM1  NUM2  CHANGING  VALUE(S).            S  =  NUM1  +  NUM2.            WRITE: / NUM1,NUM2,SUM  “得到结果为 100  200  0         ENDFORM.     执行结果: 100   200     0    “在子程序中 SUM值尚未改变               100   200   300    “返回程序时, 将变量 S的值复制给 SUM                                  “所以 SUM值变成 300
    最新回复(0)