ABAP 动态内表

目的:通过透明表配置的SQl语句,自动生成动态内表,并将生成的值赋值到程序中

定义动态内表与动态结构–指针形式:

下面展示一些 内联代码片

// An highlighted block
  FIELD-SYMBOLS: <dyn_table> TYPE STANDARD TABLE,
                 <dyn_wa>.

定义动态内表与动态结构

下面展示一些 内联代码片

// An highlighted block
  "动态内表
  DATA: dy_table TYPE REF TO data, "动态内表
        dy_line  TYPE REF TO data. "动态内表工作区
        
  DATA: lv_tabname TYPE tabname."动态内表来源的表名称

创建动态内表与动态工作区

下面展示一些 内联代码片

// An highlighted block
  "动态内表
      CREATE DATA dy_table TYPE TABLE OF (lv_tabname).
      ASSIGN dy_table->* TO <dyn_table>.
      CREATE DATA dy_line LIKE  LINE OF <dyn_table>.
      ASSIGN dy_line->* TO <dyn_wa>.

定义宏去动态取出数据放入动态内表中

这是只是举一个例子(自定义SQL语句取数),具体情况具体分析即可
下面展示一些 内联代码片

// An highlighted block
参数&1 表示需要取出的透明表的字段
参数&2 表示取数的透明表
参数&3 表示将取出的透明表数据存放到透明表中
参数&4 表示SQL语句的WHERE条件
*  "动态SQL宏,取出需要放入动态内表的数据
  DEFINE         select_data_to_wa.
    SELECT (&1)
      FROM (&2)
      APPENDING CORRESPONDING FIELDS OF TABLE &3
      WHERE (&4).
  END-OF-DEFINITION.

利用宏去取数,放入动态内表中

下面展示一些 内联代码片

// An highlighted block
*  "动态SQL宏,取出需要放入动态内表的数据
      select_data_to_wa: lv_select "被选择的透明表字段
                         lv_tabname "被选择的透明表
                         <dyn_table> "将透明表数据存入动态内表
                         lv_where. "SQL查询的where 条件

获取动态内表的字段名

下面展示一些 内联代码片

// An highlighted block
    "获取内表的字段名称
    cl_descr ?= cl_abap_typedescr=>describe_by_data( <dyn_wa> ).

循环动态内表,进行系列操作(本例为建动态内表的字段值赋值给自定义字段)

下面展示一些 内联代码片

// An highlighted block
    "获取内表的字段名称
    "取出的数据按条件汇入发送表中
    LOOP AT <dyn_table> ASSIGNING <dyn_wa> WHERE (lv_if).
      "取出动态内表的字段对应的值
      LOOP AT cl_descr->components ASSIGNING  FIELD-SYMBOL(<fs_comp>)."循环字段
        "绑定内表字段名字对应的字段值<fs_value>
        ASSIGN COMPONENT <fs_comp>-name OF STRUCTURE <dyn_wa> TO <fs_value>.
        IF sy-subrc = 0.
          "接收需要发送的字段的值
          IF lv_send_field1 IS NOT INITIAL .
            IF <fs_comp>-name = lv_send_field1.
              IF <fs_value> IS NOT INITIAL.
                lv_content1 = <fs_value>."接收第一个发送字段值
              ENDIF.
            ENDIF.
          ENDIF.
          ENDLOOP.
       ENDLOOP.

至此,一份动态内表就能正常取数并赋值到程序当中啦~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值