语法杂记总结

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
未指定任何TYPELIKE,则必须完全键入数据引用变量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 BYHAVINGORDER 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参数

猜你喜欢

转载自blog.csdn.net/ABAP_NY/article/details/114283190
今日推荐