SAP ABAP 新语法

本文介绍了ABAP编程语言中的新语法特性,如内表操作的VALUE#函数、自动填充0和-0的SQL技巧,以及实例展示了如何构造内表、访问内表元素和使用新SQL语法。适合学习者了解和实践ABAP编程的最新进展。

网上找到一些ABAP 新语法的例子:

“--------------VALUE # 构建内表----------------------------------------------

DATA r_data TYPE RANGE OF MARA-MATNR. "内表不带表头
*RANGES r_data FOR MARA-MATNR.        "这种定义的RANGES带表头,下面的VALUS语法不支持的 
r_data  = VALUE #(
                    sign = 'I' option = 'BT' ( low = 10 high = 20 )
                                             ( low = 100 high = 150 )
                              option = 'GT'  ( low = 180 )
                              option = 'LT'  ( low = 200 )
                              option = 'EQ'  ( low = 8 )
                   sign = 'E' option = 'BT'  ( low = 15 high = 18 )
                ).

cl_demo_output=>display(  r_data ).
“----VALUE、内表直接访问-------------------------------------------
DATA : LT_MARA LIKE TABLE OF MARA WITH HEADER LINE.
SELECT * FROM MARA INTO TABLE LT_MARA UP TO 10 ROWS.
DATA(WA) = VALUE MARA( MATNR = '3010001001' MATKL = '3010' ).  "产生一个MARA的结构
 LOOP AT LT_MARA ASSIGNING FIELD-SYMBOL(<FS>).
   <FS>-MATNR = |{ <FS>-MATNR ALPHA = OUT }|. "去掉前导0
   WRITE : / SY-TABIX,<FS>-MATNR.
 ENDLOOP.

 cl_demo_output=>display( LT_MARA[] ). "窗口显示一个内表


 LOOP AT LT_MARA INTO DATA(LS_MARA) .

    IF LS_MARA-MATNR eq '002321321'.
    ENDIF.

  " WRITE : / SY-TABIX,LS_MARA-MATNR.
 ENDLOOP.



 cl_demo_output=>display( LT_MARA[] ).

LT_MARA[ 5 ]-MATNR = ''. "直接访问内表第5行
LS_MARA = LT_MARA[ 5 ].

这里有很详细的说明:

ABAP 新语法-实例讲解 - Oswin0213 - 博客园主要内容 内联声明 构造表达式 内表操作 Open SQL 其他 内联声明 构造表达式 内表操作 Open SQL 其他 本文列出了ABAP新语法的一些使用方式,供大家学习参考。 内联声明 代码实现:https://www.cnblogs.com/learnning/p/10647174.html

何喜在国庆节分享的 新语法 SQL中自动加0:

 新语法 SQL中自动减0:

REPORT ZJAMES_20211008.


*  SELECT MATNR , LPAD( SERNR , 18 , '0'   ) AS A
*  FROM OBJK
*  INTO TABLE @DATA(LT_OBJK).


  SELECT MATNR , LTRIM( SERNR , '0' ) AS SERNR
  FROM OBJK
  INTO TABLE @DATA(LT_OBJK).
  BREAK-POINT.

### ABAP 中 `VALUE` 关键字的作用和使用方法 `VALUE` 是 ABAP 中用于初始化或赋值结构体变量和内表的一种简洁语法,它允许开发人员以声明式的方式为数据结构提供初始值,提高了代码的可读性和编写效率。 #### 结构体变量的赋值 在结构体变量的赋值中,`VALUE` 可以用于初始化整个结构体字段的值。通过这种方式,可以避免逐个字段赋值的繁琐操作,同时确保数据结构的完整性。 示例: ```abap TYPES: BEGIN OF ty_item, id(2) TYPE n, " 编号ID name(10) TYPE c, " 姓名 age TYPE i, " 年龄 END OF ty_item. DATA(ls_item1) = VALUE ty_item( id = &#39;1&#39; name = &#39;Andy&#39; age = 18 ). ``` 上述代码中,`ls_item1` 是一个 `ty_item` 类型的结构体变量,通过 `VALUE` 关键字一次性完成对 `id`、`name` 和 `age` 字段的赋值[^2]。 #### 内表的赋值 除了结构体变量,`VALUE` 也可以用于内表的初始化。它支持直接为内表添加多条记录,简化了内表的构造过程。 示例: ```abap TYPES: BEGIN OF ty_record, key TYPE string, value TYPE i, END OF ty_record. DATA(lt_table) = VALUE ty_record_table( ( key = &#39;A&#39; value = 10 ) ( key = &#39;B&#39; value = 20 ) ( key = &#39;C&#39; value = 30 ) ). ``` 此代码通过 `VALUE` 关键字创建了一个包含三条记录的内表 `lt_table`,每条记录由 `key` 和 `value` 组成。这种方式避免了使用循环或逐条插入记录的冗余代码。 #### 基于现有数据的赋值 `VALUE` 还支持基于现有数据进行部分字段的更。通过 `BASE` 关键字,可以基于一个已有的结构体变量生成的变量,并仅修改指定字段的值。 示例: ```abap DATA(ls_item2) = VALUE ty_item( BASE ls_item1 id = &#39;2&#39; name = &#39;Odin&#39; ). ``` 在此示例中,`ls_item2` 的字段值基于 `ls_item1`,但 `id` 和 `name` 被显式修改为的值。这种方式在需要基于现有数据生成数据时非常有用,减少了重复代码[^2]。 #### 动态赋值 `VALUE` 也支持在运行时动态构建数据结构,例如在内表中动态添加记录。 示例: ```abap DATA: lt_dynamic_table TYPE STANDARD TABLE OF ty_item WITH EMPTY KEY. APPEND VALUE ty_item( id = &#39;3&#39; name = &#39;John&#39; age = 30 ) TO lt_dynamic_table. ``` 通过 `VALUE` 关键字,可以在运行时将记录动态添加到内表中,这种方式在处理动态数据集时非常灵活[^2]。 #### 小结 `VALUE` 关键字在 ABAP 中提供了一种高效、简洁的方式来初始化结构体变量和内表,同时支持基于现有数据的赋值和动态数据的构建。它的使用不仅提高了代码的可读性,还减少了开发过程中不必要的冗余操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘欣的博客

你将成为第一个打赏博主的人!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值