VALUE语法
工作区
wa_person = VALUE #(
age = 12
name = 'TEST'
).
内表
GROUP BY语法
用于内表处理,相当于SQL语句的group by
LOOP AT itab result [cond] GROUP BY group_key
[ASCENDING|DESCENDING [AS TEXT]]
[WITHOUT MEMBERS]
[group_result].
...
[LOOP AT GROUP ...
...
ENDLOOP.]
...
ENDLOOP.
实例
SELECT *
FROM spfli
INTO TABLE @DATA(spfli_tab).
LOOP AT spfli_tab INTO DATA(wa)
GROUP BY wa-carrid WITHOUT MEMBERS
INTO DATA(key).
cl_demo_output=>write( key ).
ENDLOOP.
cl_demo_output=>display( ).
CREATE DATA
未指定任何TYPE或LIKE,则必须完全键入数据引用变量dref。 然后使用数据引用变量的静态数据类型创建数据对象
TYPES t_itab TYPE TABLE OF i WITH NON-UNIQUE KEY table_line.
DATA: tab_ref TYPE REF TO t_itab,
i_ref TYPE REF TO i.
IF tab_ref IS INITIAL.
CREATE DATA tab_ref.
ENDIF.
tab_ref->* = VALUE #( FOR i = 1 UNTIL i > 10 ( i ) ).
IF tab_ref IS NOT INITIAL.
IF i_ref IS INITIAL.
CREATE DATA i_ref.
ENDIF.
LOOP AT tab_ref->* INTO i_ref->*.
cl_demo_output=>write( |{
i_ref->* }| ).
ENDLOOP.
ENDIF.
cl_demo_output=>display( ).
FELTER语法
可以根据指定值(一个)或者指定内表(多个)的值过滤itab并返回itab类型的结果集
FILTER type( itab [EXCEPT] [IN ftab] [USING KEY keyname ]
WHERE c1 op f1 [AND c2 op f2 [...] ] ) ...
FILTER type( itab …) 对应一个值过滤
FILTER type( itab in tab …)对应多个值过滤
EXCEPT如果不指定则表示满足条件的找出来,如果指定则表示不满足条件的找出来
WHERE对应过滤的条件,是必须要指定的
GROUP BY、HAVING、ORDER BY的使用方法
HAVING对由sum或其它集合函bai数运算结du果的输出进行限制,通常与GROUP BY语句联合使用,用来过滤由 GROUP BY语句返回的记录集。
HAVING语句的存在弥补了WHERE关键字不能与聚合函数联合使用的不足
DATA :g_carrid TYPE sflight-carrid,
g_connid TYPE sflight-connid,
g_paymentsum TYPE i.
SELECT carrid connid AVG( paymentsum )
INTO (g_carrid,g_connid,g_paymentsum)
FROM sflight
GROUP BY carrid connid
HAVING AVG( paymentsum ) > 1000 "having 条件
ORDER BY connid DESCENDING."DESCENDING 降序 ASCENDING 升序
WRITE:/,g_carrid,g_connid,g_paymentsum.
ENDSELECT.
前导零处理
string = |{
string ALPHA = OUT / IN }|. OUT去除前导0 IN补充前导0
Open sql新特性
操作符CASE可以用于执行复杂case(searched case)和简单case
可以在GROUP BY后指定SQL表达式
可以在SELECT列表中同时指定SQL表达式和聚合表达式
可以在SELECT列表或者HAVING子句中指定SQL表达式作为聚合功能(比如avg)参数
移除限制
负号 - 可以直接地放置在一个算术表达式的运算数前,而不需要放在其它算术运算符的后面
简单case中的operand1, operand2也可以是SQL表达式
SQL表达式也可以和聚合表达式或者GROUP BY一起指定
操作符LIKE和IN可以在ON条件中使用
单独的比较可以通过OR连接或者通过NOT否定
外联结不再需要包含至少一个来自左右侧表的列的比较
动态WHERE条件
子查询可以动态指定
***********Open SQL中使用了本文中列出的任一新特性,语法检查将以严格模式运行。严格模式比标准模式有着更严格的语句处理。
SAP ABAP 7.50以上的隐式增强点
1、在可执行程序,函数组,模块池,子例程池和包含程序的源代码的最后一行之后可添加隐式增强点。
2、在执行procedure的第一行和最后一行之后可添加隐式增强点。
3、在源代码插件的第一行之前和之后(在ENHANCEMENT之后和ENDENHANCEMENT之前)可添加隐式增强点。
4、在本地类的声明部分的可见性部分的末尾可添加隐式增强点。
5、在本地方法声明的同名形式参数列表的末尾可添加隐式增强点。
6、在结构定义中使用BEGIN OF和END OF在语句之前加上END OF可添加隐式增强点。
SAP ABAP 7.50命名规则
1、名称最长可达30个字符。
2、允许的字符是从“A”到“Z”的字母,从“0”到“9”的数字和下划线()。
3、名称必须以字母或下划线()开头。
只有在ABAP对象之外,名称也可以以不同的字符开头。
4、名称可以具有名称空间前缀。
名称空间前缀由至少三个由两个正斜杠(/…/)括起来的字符组成。
前缀和名称的整个长度不能超过30个字符。
5、预定义的ABAP类型或预定义数据对象的名称不能用于数据类型或数据对象。
6、实际上并未禁止使用为ABAP字等保留的ID 以用于自定义定义,但强烈建议不要这样做。
7、字段符号是特殊的,因为它们的名称必须用尖括号(<…>)括起来。
尖括号是名称的一部分,这意味着字段符号可能被称为<>(但不建议这样做)。
数据声明
1、g_用于全局数据对象
2、l_用于隐藏静态属性的本地数据对象
3、i_用于IMPORTING参数
4、e_用于EXPORTING参数
5、c_用于CHANGING参数
6、r_用于RETURNING参数