Can a READ TABLE statement be created dynamically with an arbitrary number of key field specifications?

扶醉桌前 提交于 2019-12-11 02:57:38

问题


I have the name of a table DATA lv_tablename TYPE tabname VALUE 'xxxxx', and a generic FIELD-SYMBOLS: <lt_table> TYPE ANY TABLE. which contains entries selected from that corresponding table.

I've defined my line structure FIELD-SYMBOLS: <ls_line> TYPE ANY. which i'd use for reading from the table.

Is there a way to create a READ statement on <lt_table> fully specifying the key fields?

I am aware of the statement / addition READ TABLE xxxx WITH KEY (lv_field_name) = 'asdf'., but this however wouldn't work (afaik) for a dynamic number of key fields, and I wouldn't like to create a large number of READ TABLE statements with an increasing number of key field specifications.

Can this be done?


回答1:


Actually i found this to work

DATA lt_bseg TYPE TABLE OF bseg.
DATA ls_bseg TYPE bseg.
DATA lv_string1 TYPE string.
DATA lv_string2 TYPE string.

lv_string1 = `    `.
lv_string2 = lv_string1.

SELECT whatever FROM wherever INTO TABLE lt_bseg.

READ TABLE lt_bseg INTO ls_bseg
    WITH  KEY ('MANDT') = 800
              ('  ')    = ''
              ('BUKRS') = '0005'
              ('BELNR') = '0100000000'
              ('GJAHR') = 2005
              ('BUZEI') = '002'
              ('')      = ''
              ('     ') = ''
              ('    ') = '         '
              (lv_string1) = '1'
              (lv_string2) = ''.

By using this syntax one can just specify as many key fields as required. If some fields will be empty, then these will just get ignored, even if values are specified for these empty fields.

One must pay attention that using this exact syntax (static definitions), 2 fields with the exact same name (even blank names) will not be allowed.

As shown with the variables lv_string1 and lv_string2, at run-time this is no problem.

And lastly, one can specify the fields in any order (i don't know what performance benefits or penalties one might get while using this syntax)




回答2:


There seems to be the possibility ( like a dynamic select statement whith binding and lt_dynwhere ).

Please refer to this post, there was someone, who also asked for the requirement:

http://scn.sap.com/thread/1789520



来源:https://stackoverflow.com/questions/18869119/can-a-read-table-statement-be-created-dynamically-with-an-arbitrary-number-of-ke

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!