SAP ABAP - 讀取內部表



我們可以使用以下 READ TABLE 語句的語法讀取表的行:

READ TABLE <internal_table> FROM <work_area_itab>.

在此語法中,<work_area_itab> 表示式表示一個與<internal_table> 表的行型別相容的工作區。我們可以使用 WITH KEY 子句在 READ 語句中指定搜尋鍵,但不能指定表鍵,如下面的語法所示:

READ TABLE <internal_table> WITH KEY = <internal_tab_field>.

這裡,內部表的整行用作搜尋鍵。表的整行的內容與<internal_tab_field> 欄位的內容進行比較。如果<internal_tab_field> 欄位的值與表的行型別不相容,則會根據表的行型別轉換這些值。搜尋鍵允許您查詢內部表中沒有結構化行型別的條目,即行是單個欄位或內部表型別的情況。

以下 READ 語句的語法用於使用 COMPARING 子句指定工作區或欄位符號:

READ TABLE <internal_table> <key> INTO <work_area_itab>
   [COMPARING <F1> <F2>...<Fn>].

使用 COMPARING 子句時,指定的結構化行型別的表字段<F1>、<F2>…<Fn>會在傳輸之前與工作區的相應欄位進行比較。如果指定了 ALL FIELDS 子句,則 SAP 系統會比較所有元件。當 SAP 系統根據鍵找到條目時,SY-SUBRC 變數的值將設定為 0。此外,如果比較欄位的內容不相同或 SAP 系統找不到條目,則 SY-SUBRC 變數的值將設定為 2 或 4。但是,無論比較結果如何,只要 SAP 系統找到條目,就會將條目複製到目標工作區。

示例

REPORT  ZREAD_DEMO. 
*/Creating an internal table 
DATA: BEGIN OF Record1, 
ColP TYPE I, 
ColQ TYPE I, 
END OF Record1. 

DATA mytable LIKE HASHED TABLE OF Record1 WITH UNIQUE KEY ColP. 
DO 6 Times.
Record1-ColP = SY-INDEX. 
Record1-ColQ = SY-INDEX + 5. 
INSERT Record1 INTO TABLE mytable. 
ENDDO. 

Record1-ColP = 4. 
Record1-ColQ = 12. 
READ TABLE mytable FROM Record1 INTO Record1 COMPARING ColQ. 

WRITE: 'SY-SUBRC =', SY-SUBRC. 
SKIP. 
WRITE: / Record1-ColP, Record1-ColQ.

以上程式碼產生以下輸出:

SY-SUBRC =    2 

4         9

在上面的示例中,mytable 是散列表型別的內部表,Record1 作為工作區,ColP 作為唯一鍵。最初,mytable 填充了六行,其中 ColP 欄位包含 SY-INDEX 變數的值,ColQ 欄位包含 (SY-INDEX + 5) 值。

Record1 工作區分別填充了 ColP 和 ColQ 欄位的值 4 和 12。READ 語句透過使用 COMPARING 子句將 ColP 鍵欄位的值與 Record1 工作區中的值進行比較後讀取表的行,然後將讀取的行內容複製到工作區中。SY-SUBRC 變數的值顯示為 2,因為當 ColP 欄位中的值為 4 時,ColQ 中的值不是 12,而是 9。

廣告