SAP ABAP - Đọc bảng nội bộ
Chúng ta có thể đọc các dòng của bảng bằng cách sử dụng cú pháp sau của câu lệnh READ TABLE:
READ TABLE <internal_table> FROM <work_area_itab>.
Trong cú pháp này, biểu thức <work_area_itab> đại diện cho một vùng làm việc tương thích với kiểu dòng của bảng <internal_table>. Chúng ta có thể chỉ định một khóa tìm kiếm, nhưng không phải một khóa bảng, trong câu lệnh READ bằng cách sử dụng mệnh đề WITH KEY, như được hiển thị trong cú pháp sau:
READ TABLE <internal_table> WITH KEY = <internal_tab_field>.
Ở đây, toàn bộ dòng của bảng nội bộ được sử dụng làm search key. Nội dung của toàn bộ dòng của bảng được so sánh với nội dung của trường <internal_tab_field>. Nếu các giá trị của trường <internal_tab_field> không tương thích với kiểu dòng của bảng, các giá trị này được chuyển đổi theo kiểu dòng của bảng. Phím tìm kiếm cho phép bạn tìm các mục nhập trong các bảng nội bộ không có kiểu dòng có cấu trúc, nghĩa là, trong đó dòng là một trường đơn lẻ hoặc một kiểu bảng nội bộ.
Cú pháp sau của câu lệnh READ được sử dụng để chỉ định một vùng làm việc hoặc ký hiệu trường bằng cách sử dụng mệnh đề SO SÁNH -
READ TABLE <internal_table> <key> INTO <work_area_itab>
[COMPARING <F1> <F2>...<Fn>].
Khi mệnh đề SO SÁNH được sử dụng, các trường bảng được chỉ định <F1>, <F2> .... <Fn> của kiểu dòng có cấu trúc được so sánh với các trường tương ứng của vùng làm việc trước khi được vận chuyển. Nếu mệnh đề ALL FIELDS được chỉ định, hệ thống SAP sẽ so sánh tất cả các thành phần. Khi hệ thống SAP tìm thấy một mục nhập trên cơ sở khóa, giá trị của biến SY-SUBRC được đặt thành 0. Ngoài ra, giá trị của biến SY-SUBRC được đặt thành 2 hoặc 4 nếu nội dung của biến được so sánh các trường không giống nhau hoặc nếu hệ thống SAP không thể tìm thấy mục nhập. Tuy nhiên, hệ thống SAP sao chép mục nhập vào khu vực làm việc mục tiêu bất cứ khi nào nó tìm thấy mục nhập, bất kể kết quả của phép so sánh.
Thí dụ
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.
Đoạn mã trên tạo ra kết quả sau:
SY-SUBRC = 2
4 9
Trong ví dụ trên, mytable là một bảng nội bộ của loại bảng băm, với Record1 là vùng làm việc và ColP là khóa duy nhất. Ban đầu, bảng của tôi có sáu dòng, trong đó trường ColP chứa các giá trị của biến SY-INDEX và trường ColQ chứa các giá trị (SY-INDEX + 5).
Vùng làm việc Record1 được điền 4 và 12 làm giá trị cho các trường ColP và ColQ tương ứng. Câu lệnh READ đọc dòng của bảng sau khi so sánh giá trị của trường khóa ColP với giá trị trong vùng làm việc Record1 bằng cách sử dụng mệnh đề SO SÁNH, rồi sao chép nội dung của dòng đã đọc trong vùng làm việc. Giá trị của biến SY-SUBRC được hiển thị là 2 vì khi giá trị trong trường ColP là 4, giá trị trong ColQ không phải là 12 mà là 9.