4

我有一个表的名称,以及一个包含从相应表中选择的条目DATA lv_tablename TYPE tabname VALUE 'xxxxx'的泛型。FIELD-SYMBOLS: <lt_table> TYPE ANY TABLE.

我已经定义了FIELD-SYMBOLS: <ls_line> TYPE ANY.用于从表中读取的行结构。

有没有办法在<lt_table>完全指定关键字段时创建一个 READ 语句?

我知道 statement / addition READ TABLE xxxx WITH KEY (lv_field_name) = 'asdf'.,但是这对于动态数量的关键字段不起作用(afaik),而且我不希望创建大量READ TABLE具有越来越多的关键字段规范的语句。

这可以做到吗?

4

2 回答 2

6

其实我发现这个工作

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) = ''.

通过使用这种语法,您可以根据需要指定尽可能多的关键字段。如果某些字段为空,那么即使为这些空字段指定了值,这些字段也会被忽略。

必须注意,使用这种精确的语法(静态定义),将不允许使用完全相同名称的 2 个字段(甚至是空白名称)。

如变量lv_string1和所示lv_string2,在运行时这没有问题。

最后,可以按任何顺序指定字段(我不知道在使用这种语法时可能会获得什么性能优势或惩罚)

于 2013-09-19T07:18:33.227 回答
0

似乎有可能(例如带有绑定和 lt_dynwhere 的动态选择语句)。

请参考这个帖子,有人也问过这个要求:

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

于 2013-09-18T12:44:07.933 回答