动态表

REPORT ZDYSQLDEMO .

   TYPE-POOLS : abap. "类型组。
   TYPE-POOLS : slis. "类型组。

   FIELD-SYMBOLS: TYPE STANDARD TABLE,
                  ,
               .
*    定义一个指向内表类型的指针。
   DATA: dy_table TYPE REF TO data, " 声明DATA类的对象。
               dy_line  TYPE REF TO data,  " 声明DATA类的对象。
               xfc TYPE lvc_s_fcat,
*  alv 中存放FIELD属性的结构,属于类型组slis。
               ifc TYPE lvc_t_fcat.
*  alv里存放FIELD属性的内表,属于类型组slis。

    DATA : idetails TYPE abap_compdescr_tab,
*   类型组ABAP里根据abap_compdescr定义的内表。
                 xdetails TYPE abap_compdescr.
* 类型组ABAP里定义的结构,可以存放字段的属性,

*比如:字段名,长度,数据类型等。
DATA : ref_table_des TYPE REF TO cl_abap_structdescr.
*声明cl_abap_structdescr的对象,
*类cl_abap_structdescr可以动态生成数据类型。
*下面以表ZMMI1为例子创建一个动态内表 。
DATA:TABLENAME(30) TYPE C.
TABLENAME = 'ZMMI1'.
      ref_table_des ?=
        cl_abap_typedescr=>describe_by_name( TABLENAME ).
*  构造函数初始化对象 ref_table_des
    idetails[] = ref_table_des->components[].

     LOOP AT idetails INTO xdetails.
      CLEAR xfc.
      xfc-fieldname = xdetails-name .
      xfc-inttype = xdetails-type_kind.
      xfc-intlen = xdetails-length + xdetails-decimals.
      xfc-decimals = xdetails-decimals.
     APPEND xfc TO ifc.
*将表ZMMI1中的字段属性传递给内表ifc
     ENDLOOP.

*    下面会根据内表IFC中的存放的字段属性构造内表

*实际上ABAP的动态内表实现起来是非常灵活的,对于那表IFC的内容我们也可根
*据自己的需要随意构造,最主要的是下面这个静态方法。

   CALL METHOD cl_alv_table_create=>create_dynamic_table
    EXPORTING
      it_fieldcatalog = ifc
    IMPORTING
      ep_table        = dy_table.
   ASSIGN dy_table->* TO .

*让 指向dy_table。
  CREATE DATA dy_line LIKE LINE OF .
  ASSIGN dy_line->* TO .
*让指向dy_line。

*  到这里,我们动态那表就构造完成了,下面是动态SQL的实现。
      data:L_COND(100) TYPE C.
      DATA: I_COND LIKE TABLE OF L_COND.

      CONCATENATE 'MJAHR = '''  '2008' '''' INTO L_COND.
      APPEND L_COND TO I_COND.

      SELECT * INTO CORRESPONDING FIELDS OF TABLE 
             FROM ('ZMMI1') where (I_COND).

*上面的这条查询语句里的*号可以换成('filed1field2 field3')
*也是没有问题的,这里为了方便期间就用*了

*对于WHERE条件,必须通过那表来传,需要注意的是在SAP里的字符串,两个连续
*的逗号相当于一个逗号。
*我们把数据塞到 以后,需要把数据从里面读取出来,
*下面是读取的方法:
    LOOP AT INTO .
    DO.
      ASSIGN COMPONENT  sy-index
         OF STRUCTURE TO .
      IF sy-subrc <> 0.
        EXIT.
      ENDIF.
      IF sy-index = 1.
        WRITE:/ .
      ELSE.
        WRITE: .
      ENDIF.
    ENDDO.
  ENDLOOP.

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/139677/viewspace-606609/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/139677/viewspace-606609/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值