4

テーブルの名前と、対応するテーブルから選択されたエントリを含むDATA lv_tablename TYPE tabname VALUE 'xxxxx'ジェネリックがあります。FIELD-SYMBOLS: <lt_table> TYPE ANY TABLE.

FIELD-SYMBOLS: <ls_line> TYPE ANY.テーブルからの読み取りに使用する行構造を定義しました。

<lt_table>キー フィールドを完全に指定して READ ステートメントを作成する方法はありますか?

私はステートメント/追加を認識しています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 に答える