zoukankan      html  css  js  c++  java
  • ABAP 7.4 新语法-内嵌生命和内表操作(转)

    转自:https://www.cnblogs.com/mingdashu/p/6744637.html

    ABAP 7.4 新语法-内嵌生命和内表操作

     

        1.内嵌声明

        2.内表操作

        3.opensql

    *&---------------------------------------------------------------------*

    1. 内嵌声明

      1)声明符号: DATA(...)

               再也不需要建立一堆的临时变量了

      2)指针声明符:FILED-SYMBOL(…)

    *&---------------------------------------------------------------------*

    7.40之前-变量

    DATA text TYPE string.
    text = `...`.

    7.40之后-变量

    DATA(text) = `...`.

    *&---------------------------------------------------------------------*

    7.40之前-工作区

    DATA wa like LINE OF itab.
    LOOP AT itab INTO wa.  
       ...
    ENDLOOP.

    7.40之后-工作区

    LOOP AT itab INTO DATA(wa).   
      ...
    ENDLOOP.

    *&---------------------------------------------------------------------*

    7.40之前-返回参数

    DATA xml TYPE xstring.
    CALL TRANSFORMATION ... RESULT XML xml.

    7.40之后-返回参数

    CALL TRANSFORMATION ... RESULT XML DATA(xml).

    *&---------------------------------------------------------------------*

    7.40之前-传输参数

    DATA a1 TYPE ...
    
    DATA a2 TYPE ...
    
    oref->meth( IMPORTING p1 = a1 IMPORTING p2 = a2 ... )

    7.40之后-传输参数

    oref->meth( IMPORTING p1 = DATA(a1) IMPORTING p2 = DATA(a2) ... )

    *&---------------------------------------------------------------------*

    7.40之前-引用声明

    复制代码
    DATA ixml           TYPE REF TO if_ixml.
    DATA stream_factory TYPE REF TO if_ixml_stream_factory.
    DATA document       TYPE REF TO if_ixml_document.
    
     
    
    ixml           = cl_ixml=>create( ).
    stream_factory = ixml->create_stream_factory( ).
    document       = ixml->create_document( ).
    复制代码

    7.40之后-引用声明

    DATA(ixml)           = cl_ixml=>create( ).
    DATA(stream_factory) = ixml->create_stream_factory( ).
    DATA(document)       = ixml->create_document( ).

    *&---------------------------------------------------------------------*

    740之前-指针声明

    复制代码
    FIELD-SYMBOL:<LFS_TAB> LIKE LINE OF ITAB.
    
     
    
    LOOP AT itab ASSIGNING <LFS_TAB>.
    
    ...
    ENDLOOP.
    复制代码

    740之后-指针声明

    复制代码
    LOOP AT ITAB ASSIGNING FIELD-SYMBOL(<LFS_TAB>).
    
    …
    
    ENDLOOP.

    READ TABLE itab assigning field-symbol(<line2>) ....
    复制代码

     2. 内表操作

     
    • VALUE
    • MOVE-CORRESPONDING
    • CORRESPOING
    • FOR
    • REDUCE
    • GROUP BY
    • FILTER

    VALUE语法:

         结构赋值

         ... VALUE dtype | #(  [BASE dobj] comp1 = dobj1 comp2 = dobj2 ... ) ...

         内表赋值

         ... VALUE dtype | #( [BASE itab] (  (line1-com1 = dobj1) ( line2 ..) ... ) ...

     "内表不能带表头
    IT_VKORG = VALUE #( KUNNR = E_KNA1-KUNNR ( VKORG = '3000' ) ( VKORG = '6008' ) ) .

    复制代码
    DATA itab TYPE RANGE OF i.  
    itab = VALUE #( sign = 'I' option = 'BT' ( low = 1 high = 10 )  
                                             ( low = 21 high = 30 )  
                                             ( low = 41 high = 50 )  
                               option = 'GE' ( low = 61 ) ).  
    cl_demo_output=>DISPLAY( itab ). 
    复制代码

    MOVE-CORRESPONDING语法:

    CORRESPONDING语法:

    itab[ … ]语法

         … itab[ … ] …

         相当于read table itab ….

    u缺点

         如果对应没找到,会抛出CX_SY_ITAB_LINE_NOT_FOUND异常

         系统变量SY-SUBRC不会记录成功与否

    u改进

         IF line_exists ( itab[…] )

            …..

         ENDIF

         通过这行语法判断行是否查找到

    FOR语法

    描述

         加强版本的loop at语法,与REDUCE、VALUE关键字配合使用

    语法

         …FOR i = ... [THEN expr]  UNTIL | WHILE  log_exp ...

         …VALUE  itab( FOR i = … [THEN expr]  UNTIL | WHILE  log_exp ... )

         …REDUCE  type( INIT FOR  …. NEXT ….. 

    REDUCE语法

    GROUP BY语法

    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对应过滤的条件,是必须要指定的

    3. OPEN SQL

        SELECT SINGLE @ABAP_TRUE INTO @DATA(EXISTS) FROM KNA1 WHERE KUNNR EQ @I_KNA1-KUNNR.
        IF EXISTS <> ABAP_TRUE.
    
        ENDIF.
  • 相关阅读:
    NOIP模拟测试2「排列 (搜索)·APIO划艇」
    Linux运维基础
    Linux之权限详解
    Linux之特殊符号与正则表达式
    Linux之命令进阶
    Linux分区的几种方案
    开启MySQL远程访问权限 允许远程连接
    Linux命令
    win10 激活(亲测可用)
    帮你解决无法早起的焦虑-顺便撸羊毛
  • 原文地址:https://www.cnblogs.com/BruceKing/p/11430349.html
Copyright © 2011-2022 走看看