ABAP中USING与CHANGING的用法

简介:   ABAP中FORM参数的传递有以下几种方式。  1.引用传递(CALL BY REFERENCE)  传递参数时将参数的地址(ADDRESS)传至子程序中,也就是子程序中的参数变量与外部程序的参数变量共享地址内的值。

  ABAP中FORM参数的传递有以下几种方式。
  1.引用传递(CALL BY REFERENCE)
  传递参数时将参数的地址(ADDRESS)传至子程序中,也就是子程序中的参数变量与外部程序的参数变量共享地址内的值。又叫CALL BY ADDRESS,若子程序中的参数变量的值发生了改变,那么,外部程序的实际变量的值也发生改变。
  [Syntax]
  FORM <subform> [USING <f1> <f2>...]  [CHANGING <fr1> <fr2>...] 
  PERFORM <subform> [USING <f1> <f2>...]  [CHANGING <fr1> <fr2>...]
  USING 之后跟随着不会发生变化的子程序参数,CHANGING后面的参数按引用传递,值会随着子程序内的变化而变化。
  [FOR EXAMPLE]

  DATA: i_num1 TYPE VALUE 10,
        i_num2 TYPE VALUE 20,
        i_num3 TYPE I.

  WRITE: /   'I_NUM1=',i_num1,
             'I_NUM2=',i_num2,
             'I_NUM3=',i_num3.
  

  PERFORM CALCULATOR USING i_num1 i_num2 CHANGING i_num3.
   WRITE: / 'I_NUM1=',i_num1,
            'I_NUM2=',i_num2,
            'I_NUM3=',i_num3.

  FORM CALCULATOR USING NUM1 NUM2 CHANGING NUM3.
    NUM3 = NUM1 + NUM2.
    WRITE: / 'NUM1=',NUM1,
              'NUM2=',NUM2,
              'NUM3=',NUM3.

    "NUM1 = NUM1 + 10.  "不允许修改
     "NUM2 = NUM2 + 12.  "不允许修改

  ENDFORM.
  程序运行结果如下,i_num3变量在调用子程序后值变为了30.
  

  2.值传递(CALL BY VALUE)
  
值传递就是将参数的值复制一份到另一个至内存地址中,所以在子程序中参数变量的值的改变不影响外部程序实际变量的值。
  [Syntax]
  FORM <subform> [USING VALUE(f1) VALUE(f2)...]...
  PERFORM <subform> [USING VALUE(f1) VALUE(f2)...]...
  VALUE(f1) VALUE(f2)是按值传递的CALL BY VALUE
  [For Example]
  DATA: i_num1 TYPE VALUE 10,
        i_num2 TYPE VALUE 20,
        i_num3 TYPE I.

  WRITE: /   'I_NUM1=',i_num1,
             'I_NUM2=',i_num2,
             'I_NUM3=',i_num3.

  

  PERFORM CALCULATOR_TWO USING i_num1 i_num2 CHANGING i_num3.
   WRITE: / 'I_NUM1=',i_num1,
            'I_NUM2=',i_num2,
            'I_NUM3=',i_num3.
  

  *值传递 USING VALUE(f1)
  FORM CALCULATOR_TWO USING VALUE(NUM1) VALUE(NUM2) CHANGING SUM.
    SUM = NUM1 + NUM2.
    NUM1 = NUM1 * NUM2.
    NUM2 = NUM1 * NUM2.
    WRITE: / 'NUM1=',NUM1,
             'NUM2=',NUM2,
             'SUM=',SUM.
  ENDFORM.
  程序运行如下图,子程序内部参数变量的值发生变量,不影响外部程序实际变量的值。
  

   当只按USING的方式传递参数时其也是按引用的方式传递,共享内存地址。如下:

  DATA: i_num1 TYPE VALUE 10,
        i_num2 TYPE VALUE 20.

  WRITE: / 'I_NUM1=',i_num1 LEFT-JUSTIFIED,
           'I_NUM2=',i_num2 LEFT-JUSTIFIED.

  PERFORM CALCULATOR USING i_num1 i_num2.
   WRITE: / 'I_NUM1=',i_num1 LEFT-JUSTIFIED,
            'I_NUM2=',i_num2 LEFT-JUSTIFIED.

     FORM CALCULATOR USING NUM1 NUM2.
      WRITE: / '  NUM1=',NUM1 LEFT-JUSTIFIED,
            '  NUM2=',NUM2 LEFT-JUSTIFIED.

     NUM1 = NUM1 + 10.  
     NUM2 = NUM2 + 12. 
  ENDFORM.
   运行结果很明显,如下图:
  

  3)值传递参数并返回最终值(CALL BY VALUE AND RETURN RESULT)
  
传递参数的方式同值传递相同,但在子程序结束执行是会将传入参数变量的最终值回传一份给外部程序变量。
  [Syntax]
  FORM <subform> [.....] [CHANGING VALUE(f1)...]
  PERFORM <subform> [.....] [CHANGING VALUE(f1)...]
  CHANGING VALUE(f1)首先按CALL BY VALUE而后RETURN RESULT给外部变量.
  [For Example]
  DATA: i_num1 TYPE VALUE 10,
        i_num2 TYPE VALUE 20,
        i_num3 TYPE I.

  WRITE: /   'I_NUM1=',i_num1,
             'I_NUM2=',i_num2,
             'I_NUM3=',i_num3.
  

  PERFORM CALCULATOR_THREE USING i_num1 i_num2 CHANGING i_num3.
  WRITE: / 'I_NUM1=',i_num1,
           'I_NUM2=',i_num2,
           'I_NUM3=',i_num3.
  

  FORM CALCULATOR_THREE USING NUM1 NUM2 CHANGING VALUE(TOTAL).
    TOTAL = NUM1 + NUM2.
    WRITE: / 'NUM1=',NUM1,
             'NUM2=',NUM2,
             'TOTAL=',TOTAL,
             'I_NUM3=',i_num3.
"原值没有发生改变
  ENDFORM.
  程序运行结果如下,i_num3的值在子程序中并没有发生变量,当子程序调用结束后将把相应的值赋予。
  

  

目录
打赏
0
0
0
0
2
分享
相关文章
工作笔记之 SELECT 语句在 SAP ABAP 中的用法总结(下)(2)
在上一篇文章中,我们介绍了 ABAP 的查询语句关键的三个部分: 1.SELECT result 部分 2.FROM source 部分 3.INTO target 部分
工作笔记之 SELECT 语句在 SAP ABAP 中的用法总结(下)(2)
工作笔记之 SELECT 语句在 SAP ABAP 中的用法总结(下)(1)
在上一篇文章中,我们介绍了 ABAP 的查询语句关键的三个部分: 1、SELECT result 部分 2、FROM source 部分 3、INTO target 部分
工作笔记之 SELECT 语句在 SAP ABAP 中的用法总结(下)(1)
工作笔记之 SELECT 语句在 SAP ABAP 中的用法总结(上)(1)
日常开发过程中,最常用的语句可能就是查询语句了。那么如果从数据库表中查询数据呢?
工作笔记之 SELECT 语句在 SAP ABAP 中的用法总结(上)(1)
工作笔记之 SELECT 语句在 SAP ABAP 中的用法总结(上)(2)
日常开发过程中,最常用的语句可能就是查询语句了。那么如果从数据库表中查询数据呢?
工作笔记之 SELECT 语句在 SAP ABAP 中的用法总结(上)(2)
工作笔记之 SELECT 语句在 SAP ABAP 中的用法总结(下)(3)
在上一篇文章中,我们介绍了 ABAP 的查询语句关键的三个部分: 1.SELECT result 部分 2.FROM source 部分 3.INTO target 部分
开发语言漫谈-ABAP
ABAP是SAP公司专门用于SAP软件环境的专门语言
【置顶】SAP ABAP开发实战——从入门到精通系列目录
本文章为SAP ABAP开发实战——从入门到精通系列的目录以及关于该教程的后续写作计划表
1877 0
【置顶】SAP ABAP开发实战——从入门到精通系列目录
SAP ABAP在线预览文档对象的开发实现
应用场景:有些定制化开发(报表/功能增强等)完成之后,客户需要将其操作手册或者相关文档放在某个报表的初始画面,供实际操作者在线查阅,当然这个功能也同样类似于模板的下载,这里就以在线预览(直接打开)为例进行说明。
258 0
如何使用 Restful ABAP Programming 编程模型开发一个支持增删改查的 Fiori 应用(二)
Restful ABAP Programming 编程模式是 ABAP 这门编程语言在不断向前进化的过程中,诞生的一门新的编程模型,简称为RAP模型。
178 0
如何使用 Restful ABAP Programming 编程模型开发一个支持增删改查的 Fiori 应用(二)
也谈SAP业务顾问如何避免被ABAP开发顾问怒打
也谈SAP业务顾问如何避免被ABAP开发顾问怒打
也谈SAP业务顾问如何避免被ABAP开发顾问怒打