Constructors
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为字段,(16,18)16为字段截取的开始,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