赞
踩
动态Where条件
7.02版本,可以在Loop时使用动态Where条件;
主要使用的Secondary Keys,使用Non-unique sorted keys;
示例代码:
- "test6
- "secondary key
- FORM f_test6.
- DATA:lt_spfli TYPE TABLE OF spfli
- WITH UNIQUE HASHED KEY k_hash COMPONENTS carrid connid countryfr
- WITH NON-UNIQUE SORTED KEY k_sort COMPONENTS carrid connid.
- SELECT * FROM spfli INTO TABLE lt_spfli.
-
- "loop时使用
- LOOP AT lt_spfli INTO DATA(ls_spfli) USING KEY k_sort WHERE carrid = 'AA' AND connid = '0001'.
- ENDLOOP.
- "read时使用
- READ TABLE lt_spfli INTO ls_spfli WITH KEY k_sort COMPONENTS carrid = 'AA' connid = '0001'.
- "当使用key读出记录需要更新时,必须使用对应key
- "sy-tabix记录的值会被key影响
- "更新时需要指定transporting字段,不能更新key值字段
- MODIFY lt_spfli USING KEY k_sort FROM ls_spfli INDEX sy-tabix
- TRANSPORTING countryfr.
- ENDFORM.
示例代码:
- "test7
- "表达式访问内表
- FORM f_test7.
- DATA:lt_spfli TYPE TABLE OF spfli
- WITH NON-UNIQUE SORTED KEY k_sort
- COMPONENTS countryfr.
- DATA:ls_spfli LIKE LINE OF lt_spfli.
- DATA:lv_countryfr TYPE spfli-countryfr.
- SELECT * FROM spfli INTO TABLE lt_spfli.
-
- "line index从1开始
- ls_spfli = lt_spfli[ 1 ].
- WRITE:/ ls_spfli-carrid, ls_spfli-connid.
- "匹配多笔,只返回第一笔记录
- ls_spfli = lt_spfli[ carrid = 'AA' ].
- WRITE:/ ls_spfli-carrid, ls_spfli-connid.
- "使用key
- ls_spfli = lt_spfli[ KEY k_sort COMPONENTS countryfr = 'DE' ].
- WRITE:/ ls_spfli-carrid, ls_spfli-connid.
- "访问结构字段
- lv_countryfr = lt_spfli[ carrid = 'AA' ]-countryfr.
-
- "通过line index访问行
- * READ TABLE lt_spfli WITH KEY k_sort COMPONENTS countryfr = 'DE' TRANSPORTING NO FIELDS.
- * LOOP AT lt_spfli INTO ls_spfli FROM sy-tabix.
- * ENDLOOP.
- "line_index()方法
- "line_exists()方法
- "需要line_exists先判断访问数据行是否存在,
- "再使用line_index获取数据行
- IF line_exists( lt_spfli[ KEY k_sort COMPONENTS countryfr = 'DE' ] ).
- LOOP AT lt_spfli INTO ls_spfli
- FROM line_index( lt_spfli[ KEY k_sort COMPONENTS countryfr = 'DE' ] ).
- ENDLOOP.
- ENDIF.
- ENDFORM.
简化内表循环处理;
数据汇总方法;
示例代码:
- "test8
- "Creating Comprehensions And Reductions
- FORM f_test8.
- DATA:lt_spfli TYPE TABLE OF spfli
- WITH NON-UNIQUE SORTED KEY s_sort COMPONENTS countryfr.
- DATA:lt_spfli2 TYPE TABLE OF spfli.
- DATA:ls_spfli LIKE LINE OF lt_spfli.
- TYPES:BEGIN OF s_ty1,
- carrid TYPE spfli-carrid,
- connid TYPE spfli-connid,
-
- END OF s_ty1.
- DATA:lt_ty1 TYPE TABLE OF s_ty1.
- DATA:ls_ty1 LIKE LINE OF lt_ty1.
-
- SELECT * FROM spfli INTO TABLE lt_spfli.
- "使用MOVE-CORRESPONDING进行内表赋值
- MOVE-CORRESPONDING lt_spfli TO lt_ty1.
- "保留lt_ty1已有记录
- "MOVE-CORRESPONDING lt_spfli TO lt_ty1 KEEPING TARGET LINES.
- "如果有嵌套结构赋值
- "MOVE-CORRESPONDING lt_spfli TO lt_ty1 EXPANDING NESTED TABLES.
- "不使用Loop,获取内表部分行
- lt_spfli2 = VALUE #( FOR wa IN lt_spfli
- WHERE ( carrid = 'AA' )
- ( wa ) ).
- "结合动态where条件,注意where两边括号不能有空格
- DATA:lv_carrid TYPE string VALUE 'AZ'.
- DATA:lv_connid TYPE string VALUE '0788'.
- DATA:lv_where TYPE string.
- lv_where = | CARRID = '{ lv_carrid }' AND CONNID = '{ lv_connid }' |.
- WRITE:/ lv_where.
- lt_spfli2 = VALUE #( FOR wa IN lt_spfli
- WHERE (lv_where)
- ( wa ) ).
- LOOP AT lt_spfli2 INTO DATA(ls_spfli2).
- WRITE:/ ls_spfli2-carrid,ls_spfli2-connid.
- ENDLOOP.
- "通过REDUCE,进行数据汇总
- DATA:lt_sflight TYPE TABLE OF sflight.
- DATA:ls_sflight LIKE LINE OF lt_sflight.
- TYPES:BEGIN OF s_ty2,
- carrid TYPE sflight-carrid,
- connid TYPE sflight-connid,
- sum_occ TYPE i,
- END OF s_ty2.
- DATA:lt_sflight2 TYPE TABLE OF s_ty2.
- DATA:lt_sflight3 TYPE TABLE OF s_ty2.
- DATA:lv_occ_total TYPE I.
- SELECT * FROM sflight INTO TABLE lt_sflight.
- "加总所有seatsocc
- lv_occ_total = REDUCE i( INIT i = 0
- FOR ls_sflight2 IN lt_sflight
- NEXT i = i + ls_sflight2-seatsocc
- ).
- "根据carrid,connid分组汇总seatsocc
- LOOP AT lt_sflight INTO ls_sflight
- GROUP BY ( carrid = ls_sflight-carrid
- connid = ls_sflight-connid
- size = GROUP SIZE )
- ASCENDING ASSIGNING FIELD-SYMBOL(<fs_sflight>).
- lt_sflight2 = VALUE #( (
- carrid = <fs_sflight>-carrid
- connid = <fs_sflight>-connid
- sum_occ = REDUCE i( INIT i = 0
- FOR line IN GROUP <fs_sflight>
- NEXT i = i + line-seatsocc ) )
- ).
- MOVE-CORRESPONDING lt_sflight2 TO lt_sflight3 KEEPING TARGET LINES.
- ENDLOOP.
- LOOP AT lt_sflight3 ASSIGNING FIELD-SYMBOL(<fs_sflight3>).
- WRITE:/ <fs_sflight3>-carrid,<fs_sflight3>-connid,<fs_sflight3>-sum_occ.
- ENDLOOP.
- ENDFORM.
通过定义Table之间外键关系,实现多表连接,减少访问时循环次数。
但是查询时,会将多表数据同时查询出来,是否会出现内存溢出?
示例:
- "test9
- "Defining and Using Meshes
- "语法:
- *TYPES BEGIN OF MESH mesh_type.
- * node { TYPE {[REF TO] table_type}|ref_type }
- * | { LIKE {[REF TO] itab }|dref }
- * [association1],
- * [association2],
- * ...
- *TYPES END OF MESH mesh_type.
- "示例:DEMO_MESH*
-
- "Mesh Node
- "语法:
- "{mesh-|<mesh>-|mesh_ref->}rnode\_associ[ ... ]\_assoc1[ ... ]\_assoc2[ ... ]
- "1.{mesh-|<mesh>-|mesh_ref->}rnode
- "rnode是mesh中定义的node,可以作为开始node或结束node;
- "2. \_associ[ source [cond] ]
- "通过association获取对应结果node数据,可以指定开始node数据筛选条件;
- "3.\_assoc1[ [cond] ]\_assoc2[ [cond] ]
- "可以链式使用association访问数据;
- "Mesh Association
- "语法:
- "\_assoc[+|*][ ... ]
- "| \_assoc~node[+|*][ ... ]
- "| \^_assoc~node[+|*][ ... ] ...
- "示例:DEMO_MESH_REFLEXIVE_ASSOC_SNGL
- "+,*主要用于自关联表树状关系
- "+,获取开始node下所有子孙节点数据;
- "*,包含开始node匹配数据,获取开始node下所有子孙节点数据;
- "例如:
- "课程ID 上阶课程 描述
- "ID PID DESC
- "1 0 t1
- "2 1 t2
- "3 2 t3
- "4 0 t4
- "5 1 t5
- *TYPES:BEGIN OF line,
- * id TYPE i,
- * pid TYPE i,
- * desc TYPE string,
- * END OF line.
- *TYPES:t_itab TYPE SORTED TABLE OF line WITH UNIQUE KEY id
- * WITH NON-UNIQUE SORTED KEY by_parent
- * COMPONENTS pid,
- *TYPES:BEGIN OF MESH t_mesh,
- * node TYPE t_itab
- * ASSOCIATION _node TO node ON pid = id
- * USING KEY by_parent,
- * END OF MESH t_mesh.
- "需要查找所有课程ID为1的下阶课程
- "mesh-node\_node[ mesh-node[ id = id ] ]
- "返回:t2,t5两笔记录
- "mesh-node\_node+[ mesh-node[ id = id ] ]
- "返回:t2,t5,t3, t3返回因为他是孙子课程
- "mesh-node\_node*[ mesh-node[ id = id ] ]
- "返回:t2,t5,t3,t1 t1返回因为它符合初始条件
- "Mesh Condition
- "语法:
- "{ col1 = val1 col2 = val2 ... }
- "| { [USING KEY key] [WHERE log_exp] }
- "设置筛选条件
- "[USING KEY key] [WHERE log_exp]
- "可以在下面语法中使用:
- "LOOP AT mesh_path ...
- "FOR ... IN mesh_path ...
- "INSERT ... INTO TABLE mesh_path ...
- "MODIFY mesh_path.
- "DELETE mesh_path.
- "SET ASSOCIATION mesh_path ...
-
- FORM f_test9.
- "定义MESH
- "不能使用standard table
- "TYPES:tt_customers TYPE TABLE OF scustom.
- "TYPES:tt_customers TYPE STANDARD TABLE OF scustom.
- "TYPES:tt_customers TYPE STANDARD TABLE OF scustom
- " WITH NON-UNIQUE SORTED KEY k_sort COMPONENTS id name.
- "需要使用sorted table,hash table
- TYPES:tt_customers TYPE SORTED TABLE OF scustom WITH NON-UNIQUE KEY id name.
- TYPES:tt_books TYPE HASHED TABLE OF sbook WITH UNIQUE KEY carrid connid fldate bookid.
- TYPES:wa_books TYPE LINE OF tt_books.
- "定义mesh
- TYPES:BEGIN OF MESH m_custom_books,
- customers TYPE tt_customers ASSOCIATION _sbook TO books ON customid = id,
- books TYPE tt_books ASSOCIATION _scutomer TO customers ON id = customid,
- END OF MESH m_custom_books.
-
- "也可以定义多种key
- "SORT,HASH的UNIQUE KEY必须要指定
- TYPES:tt_scarr TYPE HASHED TABLE OF scarr
- WITH UNIQUE KEY carrid.
- TYPES:tt_spfli TYPE HASHED TABLE OF spfli
- WITH UNIQUE KEY carrid connid
- WITH NON-UNIQUE SORTED KEY k_sort_spfli COMPONENTS carrid.
- TYPES:tt_sflight TYPE HASHED TABLE OF sflight
- WITH UNIQUE KEY carrid connid fldate
- WITH NON-UNIQUE SORTED KEY k_sort_sflight COMPONENTS carrid connid.
- TYPES:tt_sairport TYPE HASHED TABLE OF sairport
- WITH UNIQUE KEY id.
-
- "定义mesh
- TYPES:BEGIN OF MESH m_flights_info,
- scarrs TYPE tt_scarr
- ASSOCIATION _spfli TO spflis
- ON carrid = carrid USING KEY k_sort_spfli,
- spflis TYPE tt_spfli
- "和sflight直接association
- ASSOCIATION _sflight TO sflights
- ON carrid = carrid
- AND connid = connid USING KEY k_sort_sflight
- "和airport之间association
- ASSOCIATION _sairport TO sairports
- ON id = airpto,
- "USING KEY primary_key,
- sflights TYPE tt_sflight,
- sairports TYPE tt_sairport,
- END OF MESH m_flights_info.
- "指针方式
- DATA:lm_custom_books3_ref TYPE REF TO DATA.
- FIELD-SYMBOLS:<fs_custom_books> TYPE m_custom_books.
- "创建mesh对象
- "方式1
- DATA:lm_custom_books TYPE m_custom_books.
- DATA:lm_flights_info TYPE m_flights_info.
- ASSIGN lm_custom_books TO <fs_custom_books>.
- "方式2
- DATA(lm_custom_books2) = NEW m_custom_books( ).
- DATA(lm_custom_books2_ref) = NEW m_custom_books( VALUE m_custom_books( ) ).
- lm_custom_books3_ref = REF #( lm_custom_books2 ).
-
-
- "填充mesh数据,这样数据过多同样会有内存限制?
- SELECT * FROM scustom INTO TABLE lm_custom_books-customers.
- SELECT * FROM sbook INTO TABLE @lm_custom_books-books.
- SELECT * FROM scarr INTO TABLE @lm_flights_info-scarrs.
- SELECT * FROM spfli INTO TABLE @lm_flights_info-spflis.
- SELECT * FROM sflight INTO TABLE @lm_flights_info-sflights.
- SELECT * FROM sairport INTO TABLE @lm_flights_info-sairports.
- "正反向数据访问
- "正向Forward associations,root node作为开始node;
- "反向Inverse associations,root node作为结束node;
- "正向数据访问
- "cutomers\_sbook
- "lt_result1数据类型和最后一个association对应表一致
- "根据customer表查询book表信息
- "lm_custom_books-customers\_sbook
- IF line_exists( lm_custom_books-customers\_sbook[
- lm_custom_books-customers[ id = '00001134' ] ] ).
- DATA(lt_result1) = VALUE tt_books( ( lm_custom_books-customers\_sbook[
- lm_custom_books-customers[ id = '00001134' ]
- ] ) ).
- "输出显示
- LOOP AT lt_result1 ASSIGNING FIELD-SYMBOL(<fs_result1>).
- WRITE:/ 'result1:',<fs_result1>-passname,<fs_result1>-order_date.
- ENDLOOP.
- ENDIF.
-
- "反向数据访问
- "lt_result2数据类型和~后的表类型一致
- "根据book表信息查询customer信息
- "lm_custom_books-books\^_sbook~customers
- IF line_exists( lm_custom_books-books\^_sbook~customers[
- lm_custom_books-books[ customid = '00001134' ] ] ).
- DATA(lt_result2) = VALUE tt_customers( ( lm_custom_books-books\^_sbook~customers[
- lm_custom_books-books[ customid = '00001134' ]
- ] ) ).
- "输出显示
- LOOP AT lt_result2 ASSIGNING FIELD-SYMBOL(<fs_result2>).
- WRITE:/ 'result2:',<fs_result2>-name,<fs_result2>-city.
- ENDLOOP.
- ENDIF.
- "根据customer表信息查询book信息
- "lm_custom_books-customers\^_scutomer~books
- IF line_exists( lm_custom_books-customers\^_scutomer~books[
- lm_custom_books-customers[ id = '00001134' ] ] ).
- "VALUE中使用()表示返回table类型,
- "注意:如果匹配多笔,也只返回单笔记录!
- DATA(lt_result3) = VALUE tt_books( ( lm_custom_books-customers\^_scutomer~books[
- lm_custom_books-customers[ id = '00001134' ] ] ) ).
- "VALUE中不使用(),表示返回工作区,单笔记录
- DATA(lt_result4) = VALUE wa_books( lm_custom_books-customers\^_scutomer~books[
- lm_custom_books-customers[ id = '00001134' ] ] ).
-
- ENDIF.
- LOOP AT lt_result3 ASSIGNING FIELD-SYMBOL(<fs_result3>).
- WRITE:/ 'result3:',<fs_result3>-passname,<fs_result3>-order_date.
- ENDLOOP.
- WRITE:/ 'result4:',lt_result4-passname,lt_result4-order_date.
-
-
- "多层级正向association
- "lm_flights_info-scarrs\_spfli[]\_sflight[ ]
- IF line_exists( lm_flights_info-scarrs\_spfli[
- lm_flights_info-scarrs[ carrid = 'AA' ] ]\_sflight[ ] ).
- "有多笔sflight记录,只返回单笔
- DATA(lt_result5) = VALUE tt_sflight( ( lm_flights_info-scarrs\_spfli[
- lm_flights_info-scarrs[ carrid = 'AA' ] ]\_sflight[ ] ) ).
- "返回多笔记录
- DATA(lt_result6) = VALUE tt_sflight( FOR <fs_result6> IN lm_flights_info-scarrs\_spfli[
- lm_flights_info-scarrs[ carrid = 'AA' ] ]\_sflight[ ]
- ( <fs_result6> )
- ).
- ENDIF.
- LOOP AT lt_result5 ASSIGNING FIELD-SYMBOL(<fs_result5>).
- WRITE:/ 'result5:',<fs_result5>-carrid,<fs_result5>-connid,<fs_result5>-fldate.
- ENDLOOP.
- "因为上面<fs_result6>已经被定义使用,
- "这里不能使用field symbol(<fs_result6>)
- "也不能直接使用fs_result6?
- "LOOP AT lt_result6 ASSIGNING FIELD-SYMBOL(<fs_result6>).
- "LOOP AT lt_result6 ASSIGNING <fs_result6>.
- LOOP AT lt_result6 ASSIGNING FIELD-SYMBOL(<fs_result61>).
- WRITE:/ 'result6:',<fs_result61>-carrid,<fs_result61>-connid,<fs_result61>-fldate.
- ENDLOOP.
- "多层级反向association
- "lm_flights_info-sflights\^_sflight~spflis[]\^_spfli~scarrs[]
- IF line_exists( lm_flights_info-sflights\^_sflight~spflis[
- lm_flights_info-sflights[ carrid = 'AA' ] ]\^_spfli~scarrs[ ] ).
- DATA(lt_result7) = VALUE tt_scarr( FOR <fs_result7> IN lm_flights_info-sflights\^_sflight~spflis[
- lm_flights_info-sflights[ carrid = 'AA' ] ]\^_spfli~scarrs[ ]
- ( <fs_result7> ) ).
- "使用field symbol保存结果
- "注意:这里返回是工作区类型
- ASSIGN lm_flights_info-sflights\^_sflight~spflis[
- lm_flights_info-sflights[ carrid = 'AA' ] ]\^_spfli~scarrs[ ]
- TO FIELD-SYMBOL(<fs_result72>).
- ENDIF.
- LOOP AT lt_result7 ASSIGNING FIELD-SYMBOL(<fs_result71>).
- WRITE:/ 'result7:',<fs_result71>-carrid,<fs_result71>-carrname,<fs_result71>-url.
- ENDLOOP.
- WRITE:/ 'result72:',<fs_result72>-carrid,<fs_result72>-carrname,<fs_result72>-url.
- "Loop AT 语句
- "LOOP AT mesh_path result.
- "...
- "ENDLOOP.
- LOOP AT lm_flights_info-spflis\_sflight[
- lm_flights_info-spflis[ carrid = 'AA' connid = '0064' ]
- WHERE fldate = '20220423'
- "AND currency = 'USD'
- ]
- INTO DATA(ls_sflight).
- WRITE:/ 'Loop at:',ls_sflight-connid,ls_sflight-fldate,ls_sflight-price.
- ENDLOOP.
- "注意:
- "lm_flights_info-spflis[ carrid = 'AA' ]时
- "table:spfli有两笔匹配记录,connid = '0017' or '0064'
- "但只会返回第一笔数据carrid = 'AA' connid = '0017'
- "然后额外条件WHERE connid = '0064'时不会返回任何记录;
- LOOP AT lm_flights_info-spflis\_sflight[
- lm_flights_info-spflis[ carrid = 'AA' connid = '0064' ]
- "lm_flights_info-spflis[ carrid = 'AA' ]
- "WHERE connid = '0064'
- ]
- INTO DATA(ls_sflight1).
- WRITE:/ 'Loop at1:',ls_sflight1-connid,ls_sflight1-fldate,ls_sflight1-price.
- ENDLOOP.
- "lm_flights_info-scarrs\_spfli[]\_sairport[]
- LOOP AT lm_flights_info-scarrs\_spfli[
- lm_flights_info-scarrs[ carrname = 'Alitalia' ]
- WHERE countryto = 'JP'
- ]\_sairport[ USING KEY primary_key ]
- INTO DATA(ls_sairport).
- "INTO DATA(ls_spfli).
- WRITE:/ 'Loop at2:',ls_sairport-id,ls_sairport-name.
- "WRITE:/ 'Loop at2:',ls_spfli-carrid,ls_spfli-connid.
- ENDLOOP.
-
-
- "FOR IN语句
- "FOR wa|<fs> IN mesh_path [let_exp]
- DATA:lt_sflights TYPE tt_sflight.
- lt_sflights = VALUE tt_sflight(
- FOR ls_sflights IN lm_flights_info-scarrs\_spfli[
- lm_flights_info-scarrs[ carrname = 'American Airlines' ] ]\_sflight[ ]
- ( ls_sflights )
- ).
- "输出结果
- LOOP AT lt_sflights INTO DATA(ls_sflights2).
- WRITE:/ 'FOR IN:',ls_sflights2-carrid,ls_sflights2-connid,ls_sflights2-fldate.
- ENDLOOP.
- "结合REDUCE汇总
- DATA(lv_sum) = REDUCE sflight-paymentsum(
- INIT v_sum TYPE sflight-paymentsum
- FOR ls_sflights3 IN lm_flights_info-scarrs\_spfli[
- lm_flights_info-scarrs[ carrname = 'American Airlines' ] ]\_sflight[ ]
- NEXT v_sum = v_sum + ls_sflights3-paymentsum
- ).
- WRITE:/ 'FOR IN2:',lv_sum.
-
-
-
- "定义mesh
- TYPES:BEGIN OF s_line1,
- id TYPE i,
- desc TYPE string,
- END OF s_line1.
- TYPES:BEGIN OF s_line2,
- id TYPE i,
- name TYPE string,
- desc TYPE string,
- END OF s_line2.
- TYPES:tt_line1 TYPE SORTED TABLE OF s_line1
- WITH NON-UNIQUE KEY id.
- TYPES:tt_line2 TYPE SORTED TABLE OF s_line2
- WITH NON-UNIQUE KEY id
- WITH NON-UNIQUE SORTED KEY k_1 COMPONENTS id name.
- TYPES:BEGIN OF MESH m_line,
- line1 TYPE tt_line1
- ASSOCIATION _line2 TO line2 ON id = id,
- line2 TYPE tt_line2,
- END OF MESH m_line.
- "INSERT语句
- "INSERT line_spec INTO TABLE mesh_path result.
- "插入时,如果UNIQUE Key不能插入重复值
- DATA:lm_line TYPE m_line.
- lm_line-line1 = VALUE #(
- ( id = 1 desc = 'line11' )
- ( id = 2 desc = 'line12' )
- ( id = 3 desc = 'line13' )
- ).
- lm_line-line2 = VALUE #(
- ( id = 1 desc = 'line21' )
- ( id = 2 desc = 'line22' )
- ( id = 2 desc = 'line222' )
- ).
- INSERT VALUE s_line1( desc = 'line14' ) INTO TABLE lm_line-line1.
- INSERT LINES OF VALUE tt_line1(
- ( id = 5 desc = 'line15' )
- ( desc = 'line16' )
- ) INTO TABLE lm_line-line1.
- INSERT INITIAL LINE INTO TABLE lm_line-line1.
- DATA:ls_line1 LIKE LINE OF lm_line-line1.
- LOOP AT lm_line-line1 INTO ls_line1.
- WRITE:/ 'Insert:',ls_line1-id,ls_line1-desc.
- ENDLOOP.
-
- INSERT VALUE s_line2( name = 'name1' desc = 'line24' ) INTO TABLE lm_line-line1\_line2[
- lm_line-line1[ 1 ] ].
- DATA:ls_line2 LIKE LINE OF lm_line-line2.
- LOOP AT lm_line-line2 INTO ls_line2.
- WRITE:/ 'Insert:',ls_line2-id,ls_line2-name,ls_line2-desc.
- ENDLOOP.
-
- "Modify语句
- "MODIFY { TABLE mesh_path [USING KEY keyname] FROM wa
- " [TRANSPORTING comp1 comp2 ...] result }
- " | { mesh_path FROM wa [TRANSPORTING comp1 comp2 ...] }.
- "MODIFY TABLE只修改符合条件单笔
- MODIFY TABLE lm_line-line1\_line2[
- lm_line-line1[ id = 2 ] ]
- FROM VALUE s_line2( name = 'modify1' desc = 'line66' ).
- MODIFY TABLE lm_line-line1\_line2[
- lm_line-line1[ id = 0 ] ]
- FROM VALUE s_line2( name = 'modify2' )
- TRANSPORTING name.
- "输出显示
- LOOP AT lm_line-line2 INTO ls_line2.
- WRITE:/ 'Modify:',ls_line2-id,ls_line2-name,ls_line2-desc.
- ENDLOOP.
- "MODIFY 修改符合条件多笔
- MODIFY lm_line-line1\_line2[
- lm_line-line1[ id = 2 ] ]
- FROM VALUE s_line2( name = 'modify multi' )
- TRANSPORTING name.
- "输出显示
- LOOP AT lm_line-line2 INTO ls_line2.
- WRITE:/ 'Modify:',ls_line2-id,ls_line2-name,ls_line2-desc.
- ENDLOOP.
-
-
- "Delete语句
- "DELETE { TABLE mesh_path table_key } | { mesh_path }.
- * "删除单笔记录
- * "1.删除line1中第4行id=1对应line2中id=1单行数据
- * DELETE TABLE lm_line-line1\_line2[
- * lm_line-line1[ 4 ] ].
- * "输出显示
- * LOOP AT lm_line-line2 INTO ls_line2.
- * WRITE:/ 'DELETE:',ls_line2-id,ls_line2-name,ls_line2-desc.
- * ENDLOOP.
- * "2.使用TABLE KEY删除
- * DELETE TABLE lm_line-line1\_line2[
- * lm_line-line1[ 5 ] ]
- * WITH TABLE KEY k_1 COMPONENTS name = 'modify multi'.
- * "输出显示
- * LOOP AT lm_line-line2 INTO ls_line2.
- * WRITE:/ 'DELETE1:',ls_line2-id,ls_line2-name,ls_line2-desc.
- * ENDLOOP.
- * "3.使用VALUE指定行域值删除
- * DELETE TABLE lm_line-line1\_line2[
- * lm_line-line1[ 5 ] ]
- * FROM VALUE s_line2( name = 'modify multi' )
- * USING KEY k_1.
-
- "删除多笔记录
- "1.line1第5行id = 2,删除line2中所有id=2记录
- * DELETE lm_line-line1\_line2[
- * lm_line-line1[ 5 ] ].
- "2.where条件删除
- DELETE lm_line-line1\_line2[
- lm_line-line1[ 5 ]
- WHERE desc = 'line22' ].
- "通过sy-subrc判断是否删除成功
- IF sy-subrc = 0.
- WRITE:/ 'delete success'.
- ELSE.
- WRITE:/ 'delete failed'.
- ENDIF.
-
-
-
- "定义mesh
- TYPES:BEGIN OF s_1,
- col1 TYPE i,
- col2 TYPE i,
- END OF s_1.
- TYPES:BEGIN OF s_2,
- col1 TYPE i,
- col2 TYPE i,
- col3 TYPE i,
- col4 TYPE i,
- END OF s_2.
- TYPES:BEGIN OF s_3,
- col3 TYPE i,
- col4 TYPE i,
- END OF s_3.
- TYPES:tt_1 TYPE SORTED TABLE OF s_1
- WITH NON-UNIQUE KEY col1 col2.
- TYPES:tt_2 TYPE SORTED TABLE OF s_2
- WITH NON-UNIQUE KEY col1 col2.
- TYPES:tt_3 TYPE SORTED TABLE OF s_3
- WITH NON-UNIQUE KEY col3.
- TYPES:BEGIN OF MESH m_1,
- t1 TYPE tt_1
- ASSOCIATION _t2 TO t2 ON col1 = col1 AND col2 = col2,
- t2 TYPE tt_2
- ASSOCIATION _t3 TO t3 ON col3 = col3 AND col4 = col4,
- t3 TYPE tt_3,
- END OF MESH m_1.
- "SET ASSOCIATION语句
- "SET ASSOCIATION mesh_path { = wa } | { LIKE wa } | { INITIAL }.
- "只会将association对应域值赋值给前置表对应字段
- "如果col4没有在association条件,则值不会写入
- DATA:lm_1 TYPE m_1.
- lm_1-t1 = VALUE #(
- ( col1 = 1 col2 = 11 )
- ( col1 = 2 col2 = 12 ) ).
- lm_1-t2 = VALUE #(
- ( col1 = 1 col2 = 11 )
- ( col1 = 2 col2 = 222 ) ).
- lm_1-t3 = VALUE #(
- ( col3 = 31 col4 = 331 )
- ( col3 = 32 col4 = 332 ) ).
- "set association
- "方式1:根据assiciation:_t3设置t2的col3,col4
- "这句设置不成功?
- "只能初始化设置值然后需要带出association值时使用?
- "DATA(ls_2) = VALUE s_2( col1 = 1 col2 = 11 ).
- "SET ASSOCIATION lm_1-t2\_t3[ ls_2 ] = lm_1-t3[ 2 ].
- INSERT INITIAL LINE INTO TABLE
- lm_1-t1\_t2[ VALUE s_1( col1 = 1 col2 = 12 ) ]
- ASSIGNING FIELD-SYMBOL(<line2>).
- SET ASSOCIATION lm_1-t2\_t3[ <line2> ] = lm_1-t3[ 1 ].
- "方式2:从节点1开始,实现相同效果
- "根据assiciation:_t3设置t2的col3,col4
- SET ASSOCIATION lm_1-t1\_t2[ VALUE s_1( col1 = 1 col2 = 11 ) ]\_t3[ ] = lm_1-t3[ 2 ].
- "SET ASSOCIATION mesh_path LIKE wa
- INSERT INITIAL LINE INTO TABLE
- lm_1-t1\_t2[ VALUE s_1( col1 = 1 col2 = 13 ) ]
- ASSIGNING FIELD-SYMBOL(<line22>).
- SET ASSOCIATION lm_1-t2\_t3[ <line22> ] LIKE VALUE s_2( col3 = 333 col4 = 3334 ).
-
- ENDFORM.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。