ABAP--新语法--Constructors

本文介绍了ABAP编程中的内联声明,如何在SELECT语句中直接定义内表以简化代码。同时讲解了类型构造函数,如NEW、VALUE、CONV等用于创建和转换值。还探讨了局部变量绑定、表选择以及表综合的概念,展示了如何在ABAP中读取和操作内表。
摘要由CSDN通过智能技术生成

Inline declaration

内部声明,将变量/指针的声明和赋值结合起来,可以在任何位置书写且类型来自于值,如例1
在ABAP SQL中,可以在select语句里直接定义内表,减少书写工作量,如例2

例1:

data(int) = 1 + 2.
data(str) = 'string'.
ASSIGN str  to field-symbol(<fs>).

测试结果:
在这里插入图片描述
例2:

select
  SUBSTRING( MATNR, 16,18 ) as matnr  
 "substring 为截取字符串,matnr为字段,(161816为字段截取的开始,18为字段截取的结束
  FROM mara
  WHERE ERNAM = 'DEMO'
  into TABLE @data(lt_matnr).

测试结果:
在这里插入图片描述

Type constructors

类型构造函数,构建特定类型或推断类型(#)的值,运算符是{new,value…}之一,运算符决定了内容范围
NEW: 创建对象/数据对象,详见New Keyword in ABAP
VALUE: 创建值(特别是结构化类型),详见New Keyword in ABAP
CONV: 转换值,详见New Keyword in ABAP
CAST: 执行向上或向下的引用强制转换,详见Open SQL
REF: 创建数据引用,详见New Keyword in ABAP
EXACT: 执行无损计算或赋值,详见New Keyword in ABAP
COND / SWITCH: 计算值条件,详见New Keyword in ABAP

Local variable binding

构建函数操作符允许过渡值的绑定
data(sqsize) = conv i( let s = 1 in s * s ).

测试结果:
在这里插入图片描述

Table selection

表选择中可以读取内表,书写内表

TYPES:BEGIN OF lty_tab,
        text1(5) TYPE c,
        text2(5) TYPE c,
      END OF lty_tab.

DATA:lt_tab TYPE SORTED TABLE OF lty_tab WITH UNIQUE KEY PRIMARY_KEY COMPONENTS text1  .
DATA:lt_tabl TYPE TABLE OF lty_tab WITH NON-UNIQUE SORTED KEY text1 COMPONENTS text1  .

lt_tab = VALUE #( ( text1 = '1' text2 = 'A' )
                  ( text1 = '2' text2 = 'B' )
                  ( text1 = '3' text2 = 'C' ) ).


READ TABLE lt_tab INDEX 1 INTO DATA(ls_tab1).
READ TABLE lt_tab WITH KEY text1 = '2'  INTO DATA(ls_tab2).
READ TABLE lt_tab INDEX 3 USING KEY primary_key INTO DATA(ls_tab3).
 "用这个语句需要有关键值,给表增加关键值可看上述代码lt_tab和lt_tabl

测试结果:

在这里插入图片描述

Table Comprehensions

表驱动:在结果表中为源表中每个选定的行创建一行,从行中的静态数到动态数

TYPES:BEGIN OF lty_tabl1,
        text1(5) TYPE c,
        text2(5) TYPE c,
        text3(5) TYPE c,
      END OF lty_tabl1.
DATA:lt_tabl1 TYPE table of lty_tabl1.
DATA:lt_tabl2 TYPE table of lty_tabl1.
DATA:lt_tabl3 TYPE table of lty_tabl1.

lt_tabl1 = VALUE #( ( text1 = '1' text2 = 'A'  text3 = '234' )
                  (   text1 = '2' text2 = 'B'  text3 = '123' )
                  (   text1 = '3' text2 = 'C'  text3 = '456' ) ).
lt_tabl2 = VALUE #( ( text1 = '1' text2 = 'A'  text3 = '455' )
                  (   text1 = '2' text2 = 'B'  text3 = '234' )
                  (   text1 = '3' text2 = 'C'  text3 = '123' ) ).


lt_tabl3 = VALUE #(
                    for ls_tabl1 in lt_tabl1 WHERE ( text1 = '1' )
                       for ls_tabl2 in lt_tabl2  
                       ( text1 = ls_tabl1-text1  text2 = 'C' text3 = ls_tabl2-text3 )
                ).

测试结果:
在这里插入图片描述
条件驱动:在目标表中创建行,直到条件为false

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值