ABAP创建内表的方法
- 格式:docx
- 大小:13.00 KB
- 文档页数:2
ABAP中域(Domain)、数据元素(Data Element)、表(Table)的创建一、基本概念 (2)1.域Domain (2)2.数据元素Data Element (2)3.字段Field (2)4.表Table (2)二、域、数据元素、字段、表的关系 (2)三、建表准备 (3)四、维护数据库表 (4)1.创建域:ZXB (4)2.创建数据元素 (7)(1)创建引用域的数据元素Z_GENDER (7)(2)创建不引用域的数据元素Z_GRADE (9)3.创建表——学生信息表ZTT_STUDENT (11)(1)维护表格基础信息:描述、提交类、是否允许维护等 (11)(2)维护表格的字段信息——参照数据元素 (12)(3)维护表格的字段信息——不参照数据元素 (12)(4)维护表格的主键 (13)(5)维护表格的技术信息 (14)(6)维护数据类型为QUAN或者CURR的字段的参照 (15)(7)激活保存表格 (16)(8)设置表格的增强类别 (18)(9)维护字段的搜索帮助、索引以及表格维护生成器等其他 (19)4.维护表的数据记录 (19)(1)通过表格数据浏览器进行维护 (19)(2)通过表格维护的实用程序进行数据记录维护 (20)(3)通过表格维护工具的数据浏览器进行维护 (21)5.创建表——学生成绩表ZTT_SCORE (23)一、基本概念1.域Domain域是用来描述一个字段的技术属性的集合,包括数据类型,数据长度,小数点位数以及取值范围等。
具有以上技术属性的相同定义的字段可以包含进一个域,那么当域的属性定义发生改变时,一旦域被激活,所有引用它的字段的属性都会对应进行更改。
2.数据元素Data Element数据元素是一个数据的类型,包含了这个元素的语义属性,它包含了一些非结构化的数据对象(如表的字段、结构的字段和变量等)的技术属性(域)、屏幕信息(比如字段长、中、短、头标签等),是能够被引用的数据类型的最小单元,比如表或者结构的字段可以参考数据元素,这样可以保证这类特性的数据一致性,同时在ABAP中,数据元素也可以直接用关键字TYPE进行引用,从数据定义的角度来看,数据元素与ABAP最基本的数据类型(如C、I、F等)是同一个层面上。
ABAP中域(Domain)、数据元素(Data Element)、表(Table)的创建一、基本概念 (2)1.域Domain (2)2.数据元素Data Element (2)3.字段Field (2)4.表Table (2)二、域、数据元素、字段、表的关系 (2)三、建表准备 (3)四、维护数据库表 (4)1.创建域:ZXB (4)2.创建数据元素 (7)(1)创建引用域的数据元素Z_GENDER (7)(2)创建不引用域的数据元素Z_GRADE (9)3.创建表——学生信息表ZTT_STUDENT (11)(1)维护表格基础信息:描述、提交类、是否允许维护等 (11)(2)维护表格的字段信息——参照数据元素 (12)(3)维护表格的字段信息——不参照数据元素 (12)(4)维护表格的主键 (13)(5)维护表格的技术信息 (14)(6)维护数据类型为QUAN或者CURR的字段的参照 (15)(7)激活保存表格 (16)(8)设置表格的增强类别 (18)(9)维护字段的搜索帮助、索引以及表格维护生成器等其他 (19)4.维护表的数据记录 (19)(1)通过表格数据浏览器进行维护 (19)(2)通过表格维护的实用程序进行数据记录维护 (20)(3)通过表格维护工具的数据浏览器进行维护 (21)5.创建表——学生成绩表ZTT_SCORE (23)一、基本概念1.域Domain域是用来描述一个字段的技术属性的集合,包括数据类型,数据长度,小数点位数以及取值范围等。
具有以上技术属性的相同定义的字段可以包含进一个域,那么当域的属性定义发生改变时,一旦域被激活,所有引用它的字段的属性都会对应进行更改。
2.数据元素Data Element数据元素是一个数据的类型,包含了这个元素的语义属性,它包含了一些非结构化的数据对象(如表的字段、结构的字段和变量等)的技术属性(域)、屏幕信息(比如字段长、中、短、头标签等),是能够被引用的数据类型的最小单元,比如表或者结构的字段可以参考数据元素,这样可以保证这类特性的数据一致性,同时在ABAP中,数据元素也可以直接用关键字TYPE进行引用,从数据定义的角度来看,数据元素与ABAP最基本的数据类型(如C、I、F等)是同一个层面上。
ABAP基本语法学习关键语句的写法内表建立过程:1、声明一个结构体2、用声明好的结构体作为工作区,声明一个内表内表名称like standard table of 结构体名称,内表名称like sorted table of 结构体名称,内表名称like harshed table of 结构体名称。
后面可以用到with 选项来进行关键字的声明。
基本语法如下:DATA itab { {TYPE tabkind OF [REF TO] type}| {LIKE tabkind OF dobj} }[WITH key] [INITIAL SIZE n][WITH HEADER LINE][VALUE IS INITIAL][READ-ONLY].DATA rtab {TYPE RANGE OF type}|{LIKE RANGE OF dobj}[INITIAL SIZE n][WITH HEADER LINE][VALUE IS INITIAL][READ-ONLY].此语句可以定义一个范围表,在操作数据库时可以用来作为判断数据选择的条件描述。
3、向内表中插入数据,插入数据可以用insert数据into内表语句或者是append数据to内表语句。
可以插入整个内表到另一内表insert lines of 内表名称into table 另一内表名称。
亦可以进行累加插入:collect 数据into 内表名称。
相同的数据进行累积。
4、修改内表数据,利用modify 关键字,modify 内表名称from 数据(用结构体表示的数据)。
可以修改多行,modify 内表名称from 数据transporting 关键字where 条件。
5、读内表数据的几种操作方法:用Include来构造一个结构体INCLUDE { {TYPE struc_type} | {STRUCTURE struc} }[AS name [RENAMING WITH SUFFIX suffix]].TYPES: BEGIN OF t_day,work TYPE c LENGTH 8,free TYPE c LENGTH 16,END OF t_day.DATA BEGIN OF week.INCLUDE TYPE t_day AS monday RENAMING WITH SUFFIX _mon.INCLUDE TYPE t_day AS tuesday RENAMING WITH SUFFIX _tue.INCLUDE TYPE t_day AS wednesday RENAMING WITH SUFFIX _wed. DATA END OF week.可以用两种方式来访问结构体的内容:1、直接用结构体的名称来访问:week-monday-work, week-monday-free, week-tuesday-work2、用重新命名的后缀名字来访问:week-work_mon, week-free_mon, week-work_tue类对象的定义方式:CLASS class DEFINITION [class_options].[PUBLIC SECTION.[components]][PROTECTED SECTION.[components]][PRIVATE SECTION.[components]]ENDCLASS.类对象的实现方式:CLASS class IMPLEMENTATION....METHOD ......ENDMETHOD....ENDCLASS.类对象的继承:CLASS class DEFINITIONLOCAL FRIENDS class1 class2 ...intf1 intf2 ...CLASS class DEFINITION { {DEFERRED [PUBLIC]} | LOAD }.[PUBLIC][INHERITING FROM superclass][ABSTRACT][FINAL][CREATE {PUBLIC|PROTECTED|PRIVATE}][SHARED MEMORY ENABLED][FOR TESTING][[GLOBAL] FRIENDS class1 class2 ...intf1 intf2 ...].Deferred 关键字可以预先声明一个未被定义的类。
动态内表的创建和使用主要有以下几点:1.动态内表的创建,首先要定义动态结构,然后再根据定义的动态结构利用系统一个标准的method:”cl_alv_table_create=>create_dynamic_table“生成动态内表。
2.动态内表的赋值,遍历动态结构,获取指定的字段,然后给指定的字段赋值。
3.动态内表的读取显示,与赋值相似,遍历动态结构,获取指定的字段,然后读取对应字段的值。
下面是具体的代码实例:①定义所需的系统变量。
FIELD-SYMBOLS:<dyn_table> TYPE STANDARD TABLE,"动态内表<dyn_wa> TYPE ANY,"动态内表的工作区<dyn_field> TYPE ANY."指向动态内表工作区某一字段的指针DATA:dy_table TYPE REF TO data,dy_line TYPE REF TO data,it_structure TYPE lvc_t_fcat,”存储动态内表列的内表,其中的每一行代表动态内表的一列。
wa_structure TYPE lvc_s_fcat.“lvc_t_fact的工作区。
②通过lvc_t_fact构建动态内表的列:FORM setstructrue USING value(p_fname) TYPE char6value(p_col) TYPE int4value(p_tab) TYPE char10value(p_fld) TYPE char6.wa_structure-fieldname = p_fname." 列名wa_structure-col_pos = p_col.“列的顺序wa_structure-ref_table = p_tab.”参照表wa_structure-ref_field = p_fld.“参照字段APPEND wa_structure TO it_structure.ENDFORM. "setstructrue③通过lvc_t_fact构建创建动态内表给dy_table:FORM create_dynamic_table .CALL METHOD cl_alv_table_create=>create_dynamic_table"类静态方法EXPORTINGit_fieldcatalog = it_structureIMPORTINGep_table = dy_table.ASSIGN dy_table->* TO <dyn_table>.ENDFORM. " CREATE_DYNAMIC_TABLE④给动态内表赋值:FORM setdata .DATA:wa_new_line TYPE REF TO data.DATA lv_tol TYPE wertv12.CREATE DATA wa_new_line LIKE LINE OF <dyn_table>.ASSIGN wa_new_line->* TO <dyn_wa>.”让<dyn_wa>代表指向动态内表的工作区LOOP AT gt_coep2.CLEAR <dyn_wa>.READ TABLE it_structure INTO wa_structure INDEX 4.“获取it_structure的第四行,即动态内表的第四列ASSIGN COMPONENT wa_structure-fieldname OF STRUCTURE <dyn_wa> TO <dyn_field>.”当<dyn_field>指向工作区中的第四个字段PERFORM removezero USING gt_coep2-kstar.<dyn_field> = gt_coep2-kstar.“通过给field-symbol赋值来达到给工作区中第四个字段赋值的作用。
ABAP中的引用表,又称为内表,是程序执行时临时存在于内存中的表。
在ABAP中,我们可以通过不同的关键字来创建和操作引用表,比如使用SELECT、LOOP等关键字。
关于引用的创建,我们可以使用“SELECT ... INTO TABLE”语句从底表(硬盘上的数据库表)中查询数据,并将查询结果存储到内表中。
此外,我们还可以使用“APPEND ... TO TABLE”语句将结构的数据插入到内表中。
在内表中,我们可以使用不同的方法来操作数据。
例如,我们可以在LOOP语句中使用MODIFY关键字来一行一行地更新数据。
另外,我们还可以使用“FOR ALL ENTRIES IN”语句来关联底表和内表,并从内表中获取值。
此外,ABAP还提供了许多其他有用的功能来处理内表。
例如,我们可以使用二分法查询(BINARY SEARCH)来提高查询效率,如果满足条件则执行某些代码(IF ... ENDIF语句),还可以在循环中执行特定的代码(AT END OF field ... ENDAT语句)。
总的来说,ABAP中的引用表是一种非常有用的工具,可以帮助我们高效地处理和操作数据。
ABAP动态内表创建赋值DATA:it_structure TYPE lvc_t_fcat,dy_line TYPE REF TO data,dy_table TYPE REF TO data.FIELD-SYMBOLS: <dyn_wa> TYPE ANY,<dyn_table> TYPE table."根据动态内表结构,创建动态内表FORM create_dy_table USING p_structure.CALL METHOD cl_alv_table_create=>create_dynamic_tableEXPORTINGit_fieldcatalog = p_structure "USING it_structureIMPORTINGep_table = dy_table.ASSIGN dy_table->* TO <dyn_table>.ENDFORM."给动态内表赋值FORM get_data.CREATE DATA dy_line LIKE LINE OF <dyn_table>.ASSIGN dy_line->* TO <dyn_wa>.LOOP AT gt_itab INTO gs_itab.MOVE-CORRESPONDING gs_itab TO <dyn_wa>.APPEND <dyn_wa> TO <dyn_table>.ENDLOOP.ENDFORM.ASSIGN 分配FIELD-SYMBOLS:<fs>.DATA:str(20) TYPE c VALUE 'Output String',name(20) TYPE c VALUE 'STR'."静态分配:编译时就知道要分配的对象名ASSIGN name TO <fs>."结果是<fs>与name变量等同"通过变量名动态访问变量ASSIGN (name) TO <fs>."结果是是<fs>的值为str变量值"通过索引分配LOOP AT <dyn_table> ASSIGNING <dyn_wa> .ASSIGN COMPONENT col OF STRUCTURE <dyn_wa> TO <fs3>.endloop.通过字段名动态的访问结构成员COMPONENT <f2>OF STRUCTURE TO <f3>.。
[SAPABAP开发技术总结]内表操作内表是每个ABAP开发⼈员都必须懂的,数据从R3取出来后,就是放在内表⾥处理的,其实就是Java中的集合框架,只是没有那么多不同数据结构的内表,⽬前只有标准、排序、Hash三种,这还是新的语法,⽼的只有个标准的,关于内表这⽅⾯的定义、性能,以后我专贴⼀篇⽂章吧。
这⾥只是对内表的常⽤操作,这也是项⽬中⽤得最多的点!3.内表3.4.适合所有类型的内表操作COLLECT [<wa>INTO] <> 将具有相同关键字段值的⾏中同名的数字字段的值累计到⼀条记录上,只有⾮表关键字段被累加;当在内表中找不到指定的被累加⾏时,COLLECT语句的功能与APPEND语句是⼀样的,即将⼀个⼯作区的内容附加到itab内表中。
使⽤COLLECT操作的内表有⼀个限制,即该的⾏结构中,除了表键字段以外的所有字段都必须是数字型(i、p、f)INSERT <wa> INTO TABLE <itab>."单条插⼊INSERT LINES OF <itab1> [FROM <n1>] [TO <n2>] INTO TABLE<itab2>"批量插⼊向UNIQUE 的排序表或哈希表插⼊重复的数据时,不会抛异常,但数据不会被插⼊进去,这与是不⼀样的"只要根据关键字或索引在内表中读取到相应数据,不管该数据⾏是否与COMPARING 指定的字段相符,都会存储到⼯作区<itab> WITH KEY{<k1> = <f1> ... <kn> = <fn>...[]}INTO <wa> [COMPARING <f1><f2> ...|ALL FIELDS][TRANSPORTING <f1><f2> ...|ALL FIELDS|NO FIELDS]READ TABLE <itab> FROM <wa>…以表关键字为查找条件,条件值来⾃<wa>COMPARING:系统根据<k1>...<kn>(关键字段)读取指定的单⾏与⼯作区<wa>中的相应组件进⾏⽐较。
A B A P动态内表的使用动态内表的创建和使用主要有以下几点:1.动态内表的创建,首先要定义动态结构,然后再根据定义的动态结构利用系统一个标准的method:”cl_alv_table_create=>create_dynamic_table“生成动态内表。
2.动态内表的赋值,遍历动态结构,获取指定的字段,然后给指定的字段赋值。
3.动态内表的读取显示,与赋值相似,遍历动态结构,获取指定的字段,然后读取对应字段的值。
下面是具体的代码实例:①定义所需的系统变量。
FIELD-SYMBOLS:<dyn_table> TYPE STANDARD TABLE,"动态内表<dyn_wa> TYPE ANY,"动态内表的工作区<dyn_field> TYPE ANY."指向动态内表工作区某一字段的指针DATA:dy_table TYPE REF TO data,dy_line TYPE REF TO data,it_structure TYPE lvc_t_fcat,”存储动态内表列的内表,其中的每一行代表动态内表的一列。
wa_structure TYPE lvc_s_fcat.“lvc_t_fact的工作区。
②通过lvc_t_fact构建动态内表的列:FORM setstructrue USING value(p_fname) TYPE char6value(p_col) TYPE int4value(p_tab) TYPE char10value(p_fld) TYPE char6.wa_structure-fieldname = p_fname." 列名wa_structure-col_pos = p_col.“列的顺序wa_structure-ref_table = p_tab.”参照表wa_structure-ref_field = p_fld.“参照字段APPEND wa_structure TO it_structure.ENDFORM. "setstructrue③通过lvc_t_fact构建创建动态内表给dy_table:FORM create_dynamic_table .CALL METHOD cl_alv_table_create=>create_dynamic_table"类静态方法EXPORTINGit_fieldcatalog = it_structureIMPORTINGep_table = dy_table.ASSIGN dy_table->* TO <dyn_table>.ENDFORM. " CREATE_DYNAMIC_TABLE④给动态内表赋值:FORM setdata .DATA:wa_new_line TYPE REF TO data.DATA lv_tol TYPE wertv12.CREATE DATA wa_new_line LIKE LINE OF <dyn_table>.ASSIGN wa_new_line->* TO <dyn_wa>.”让<dyn_wa>代表指向动态内表的工作区LOOP AT gt_coep2.CLEAR <dyn_wa>.READ TABLE it_structure INTO wa_structure INDEX 4.“获取it_structure的第四行,即动态内表的第四列ASSIGN COMPONENT wa_structure-fieldname OF STRUCTURE <dyn_wa> TO <dyn_field>.”当<dyn_field>指向工作区中的第四个字段PERFORM removezero USING gt_coep2-kstar.<dyn_field> = gt_coep2-kstar.“通过给field-symbol赋值来达到给工作区中第四个字段赋值的作用。
ABAP动态⽣成内表的三种⽅法原⽂链接:https:///zhongguomao/article/details/77474375动态内表的创建和使⽤主要有以下⼏点:1.动态内表的创建,⾸先要定义动态结构,然后再根据定义的动态结构利⽤系统⼀个标准的method:”cl_ALV_table_create=>create_dynamic_table“⽣成动态内表。
2.动态内表的赋值,遍历动态结构,获取指定的字段,然后给指定的字段赋值。
3.动态内表的读取显⽰,与赋值相似,遍历动态结构,获取指定的字段,然后读取对应字段的值。
⽅法1:TYPE-POOLS:ABAP.PARAMETERS p_name TYPE tabname.DATA lt_table TYPE TABLE OF dfies. "字段结构表DATA ls_table TYPE dfies.DATA lr_struc TYPE REF TO cl_abap_structdescr.DATA lr_table TYPE REF TO cl_abap_tabledescr.DATA lr_type TYPE REF TO cl_abap_typedescr.DATA lr_data TYPE REF TO cl_abap_datadescr.DATA lt_comp TYPE abap_component_tab.DATA ls_comp LIKE LINE OF lt_comp.DATA dyn_wa TYPE REF TO data.DATA dyn_table TYPE REF TO data.DATA l_string TYPE string.FIELD-SYMBOLS: <dyn_table> TYPE STANDARD TABLE,<dyn_wa> TYPE ANY.*1.获取表中的字段结构CALL FUNCTION'DDIF_NAMETAB_GET'EXPORTINGtabname = p_nameTABLESdfies_tab = lt_tableEXCEPTIONSnot_found = 1OTHERS = 2.IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ENDIF.LOOP AT lt_table INTO ls_table.CONCATENATE ls_table-tabname '-' ls_table-fieldname INTO l_string.ls_comp-name = ls_table-fieldname.*读取字段类型CALL METHOD cl_abap_datadescr=>describe_by_nameEXPORTINGp_name = l_stringRECEIVINGp_descr_ref = lr_typeEXCEPTIONStype_not_found = 1OTHERS = 2.IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ENDIF.ls_comp-type ?= lr_type.APPEND ls_comp TO lt_comp.CLEAR ls_comp.ENDLOOP.*根据字段⽬录创建动态结构类型CALL METHOD cl_abap_structdescr=>createEXPORTINGp_components = lt_compRECEIVINGp_result = lr_struc.*根据动态结构创建动态内表类型CALL METHOD cl_abap_tabledescr=>createEXPORTINGp_line_type = lr_strucRECEIVINGp_result = lr_table.*参照动态结构类型和动态内表类型创建内表与⼯作区CREATE DATA dyn_wa TYPE HANDLE lr_struc.CREATE DATA dyn_table TYPE HANDLE lr_table.*指定内表与⼯作区到字段符号ASSIGN dyn_wa->* TO <dyn_wa>.ASSIGN dyn_table->* TO <dyn_table>.*从动态表中取数到动态内表中SELECT * INTO CORRESPONDING FIELDS OF TABLE <dyn_table> UP TO100 ROWS FROM (p_name).*显⽰内表中的数据CALL FUNCTION'REUSE_ALV_GRID_DISPLAY'EXPORTINGi_structure_name = p_nameTABLESt_outtab = <dyn_table>EXCEPTIONSprogram_error = 1OTHERS = 2.IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ENDIF.⽅法2:TYPE-POOLS:abap.PARAMETERS p_name TYPE tabname.DATA: d_ref TYPE REF TO data,lt_alv_cat TYPE TABLE OF lvc_s_fcat,ls_alv_cat LIKE LINE OF lt_alv_cat.DATA: lt_table LIKE TABLE OF dntab.DATA: ls_table TYPE dntab.FIELD-SYMBOLS : <dyn_table> TYPE table,<dyn_wa> TYPE ANY,<dyn_field> TYPE ANY.*取出表结构的字段⽬录CALL FUNCTION'NAMETAB_GET'EXPORTINGlangu = sy-langutabname = p_nameTABLESnametab = lt_tableEXCEPTIONSno_texts_found = 1.*根据取出的字段⽬录⽣成参考字段⽬录LOOP AT lt_table INTO ls_table.ls_alv_cat-fieldname = ls_table-fieldname.ls_alv_cat-ref_table = p_name.ls_alv_cat-ref_field = ls_table-fieldname.APPEND ls_alv_cat TO lt_alv_cat.CLEAR ls_alv_cat.ENDLOOP.*内表创建CALL METHOD cl_alv_table_create=>create_dynamic_tableEXPORTINGit_fieldcatalog = lt_alv_catIMPORTINGep_table = d_ref.*指定⽣成的内表到字段符号ASSIGN d_ref->* TO <dyn_table>.*从动态表中取数到动态内表中SELECT * INTO CORRESPONDING FIELDS OF TABLE <dyn_table> UP TO100 ROWS FROM (p_name).*显⽰内表中的数据CALL FUNCTION'REUSE_ALV_GRID_DISPLAY'EXPORTINGi_structure_name = p_nameTABLESt_outtab = <dyn_table>EXCEPTIONSprogram_error = 1OTHERS = 2.IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ENDIF.⽅法3:PARAMETERS p_name TYPE tabname.DATA: dyn_table TYPE REF TO data.DATA: dyn_wa TYPE REF TO data.FIELD-SYMBOLS: <dyn_table> TYPE table,<dyn_wa> TYPE ANY.*创建动态表结构CREATE DATA dyn_table TYPE TABLE OF (p_name).*创建动态内表ASSIGN dyn_table->* TO <dyn_table>.*创建动态⼯作区结构CREATE DATA dyn_wa LIKE LINE OF <dyn_table>.*创建动态⼯作区ASSIGN dyn_wa->* TO <dyn_wa>.*从动态表中取数到动态内表中SELECT * INTO CORRESPONDING FIELDS OF TABLE <dyn_table> UP TO100 ROWS FROM (p_name).*对取出数据进⾏处理LOOP AT <dyn_table> assigning <dyn_wa>."内表数据处理ENDLOOP.*显⽰内表中的数据CALL FUNCTION'REUSE_ALV_GRID_DISPLAY'EXPORTINGi_structure_name = p_nameTABLESt_outtab = <dyn_table>EXCEPTIONSprogram_error = 1OTHERS = 2.IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ENDIF.。
说明:几种内表的定义方法。
REPORT ZTESTLP_1206.DATA: BEGIN OF itab_test OCCURS 0, " 定义了一个有表头的内表matnr(04) TYPE C,ebeln TYPE I,END OF itab_test.TYPES: BEGIN OF itab_c,aaa TYPE I,bbb(20) TYPE C,END OF itab_c.DATA: ITAB1 LIKE RANGE OF MARA-MATNR. " 定义一个表,结构为ranges ,有上下限RANGES: s_bwart FOR mseg-bwart." data likeDATA tlike LIKE itab_test. " 定义一个结构DATA tlike_occurs0 LIKE itab_test OCCURS 0. " 定义一个无表头的内表DATA tlike_occurs0_withhead LIKE itab_test OCCURS 0 WITH HEADER LINE. " 定义一个有表头的内表" data like line ofDATA: like_line_of LIKE LINE OF itab_test, " 定义一个结构like_line_of_occurs0 LIKE line of itab_test OCCURS 0, " 定义一个无表头的内表like_line_of_occurs0_nohead LIKE LINE OF itab_test OCCURS 0 WITH HEADER LINE. " 定义一个有表头的内表" data like table of 只能跟内表,不能跟结构、工作区DATA lt LIKE TABLE OF itab_test . " 定义了一个参照有表头内表的内表,但不带工作区*DATA lt_occurs0 LIKE TABLE OF itab_test OCCURS 0. 错误定义,不可带OCCURS 0。
说明:几种内表的定义方法。
REPORT ZTESTLP_1206.
DATA: BEGIN OF itab_test OCCURS 0, " 定义了一个有表头的内表
matnr(04) TYPE C,
ebeln TYPE I,
END OF itab_test.
TYPES: BEGIN OF itab_c,
aaa TYPE I,
bbb(20) TYPE C,
END OF itab_c.
DATA: ITAB1 LIKE RANGE OF MARA-MATNR. " 定义一个表,结构为ranges ,有上下限RANGES: s_bwart FOR mseg-bwart.
" data like
DATA tlike LIKE itab_test. " 定义一个结构
DATA tlike_occurs0 LIKE itab_test OCCURS 0. " 定义一个无表头的内表
DATA tlike_occurs0_withhead LIKE itab_test OCCURS 0 WITH HEADER LINE. " 定义一个有表头的内表
" data like line of
DATA: like_line_of LIKE LINE OF itab_test, " 定义一个结构
like_line_of_occurs0 LIKE line of itab_test OCCURS 0, " 定义一个无表头的内表
like_line_of_occurs0_nohead LIKE LINE OF itab_test OCCURS 0 WITH HEADER LINE. " 定义一个有表头的内表
" data like table of 只能跟内表,不能跟结构、工作区
DATA lt LIKE TABLE OF itab_test . " 定义了一个参照有表头内表的内表,但不带工作区
*DATA lt_occurs0 LIKE TABLE OF itab_test OCCURS 0. 错误定义,不可带OCCURS 0。
DATA lt_withhead LIKE TABLE OF itab_test WITH HEADER LINE. " 定义一个有表头的内表。
*DATA lt_orc LIKE LINE OF itab_c. " 错误定义不能跟结构itab_C.
" 另外定义lt的工作区。
DATA: BEGIN OF wa_lt,
matnr(04) TYPE C,
ebeln TYPE I,
END OF wa_lt. itab_test-matnr = '0014'. itab_test-ebeln = 12133.
APPEND itab_test.
itab_test-matnr = 'BT02'. itab_test-ebeln = 23433.
APPEND itab_test.
wa_lt-matnr = 'KKKK'. wa_lt-ebeln = 8888. APPEND wa_lt to lt.
wa_lt-matnr = 'KKKG'. wa_lt-ebeln = 99999. APPEND wa_lt to lt.
WRITE : 'itab_test内表原始数据:'. CLEAR itab_test.
LOOP AT itab_test.
WRITE: / itab_test-matnr, itab_test-ebeln. ENDLOOP.
LOOP AT lt INTO wa_lt.
WRITE: / wa_lt-matnr, wa_lt-ebeln. ENDLOOP.
clear itab_test.
SKIP 2.
WRITE : 'itab_test内表清空测试:'.
if itab_test is INITIAL.
WRITE :/ '表头清空'.
ENDIF.
CLEAR itab_test[].
if itab_test[] is INITIAL.
WRITE: / 'itab_test表体清空'.
endif.
CLEAR lt.
if itab_test[] is INITIAL.
WRITE: / 'lt表体清空'.
endif.。