動的に作成する必要がある内部テーブルを読み取る方法を考え出そうとしています。動的な内部テーブルにデータを入力する次のレポートを作成しました。
最後の行で、キーを使用して読み取ろうとしていますが (mandt
たとえば)、次の構文エラーが発生します。
指定されたタイプには構造がないため、MANDT と呼ばれるコンポーネントはありません
<any_tab>
デバッグしたところ、正常にデータが取り込まれ、テーブルの構造 (フィールド名) が正しいことがわかります。テーブルを作業領域に読み込もうとすると、問題が発生します。たぶん私はこれを間違っているのかもしれませんが、それはできるはずのことのように思えますし、小さな何かが欠けていると感じています.
私がこれを試している理由は、プログラムで同じ選択が行われていることを発見し、レコードをメモリにバッファリングしてそこから読み取り、DB アクセスを回避したいからです。これは簡単に実装できますが、最適化しようとしている OPEN SQL ステートメントのテーブル、where
句、および句が動的である場合は、これを実行していません。into
構文エラーを修正するには?
DATA: t681_rep TYPE TABLE OF t681 , wa_681 LIKE LINE OF t681_rep,
tabref TYPE REF TO data , waref TYPE REF TO data.
FIELD-SYMBOLS: <any_tab> TYPE ANY TABLE,
<any_wa> TYPE ANY,
<var1> TYPE ANY.
"fill t681_rep
SELECT *
FROM t681
INTO TABLE t681_rep
UP TO 1 ROWS WHERE kotab = 'A002'.
READ TABLE t681_rep INTO wa_681 WITH KEY kotab = 'A002'.
IF sy-subrc = 0.
"if A002 is found create a table of that type and fill it
CREATE DATA tabref TYPE TABLE OF (wa_681-kotab).
ASSIGN tabref->* TO <any_tab>.
SELECT * UP TO 10 ROWS
FROM (wa_681-kotab)
INTO TABLE <any_tab>.
ENDIF.
CREATE DATA waref TYPE a002.
ASSIGN waref->* TO <any_wa>.
READ TABLE <any_tab> ASSIGNING <any_wa> WITH KEY mandt = '800'. <- problem area
IF sy-subrc = 0.
"do stuff with <any_wa>...
ENDIF.