SAP ABAP - Xóa bảng nội bộ
Câu lệnh DELETE được sử dụng để xóa một hoặc nhiều bản ghi khỏi bảng nội bộ. Các bản ghi của bảng nội bộ bị xóa bằng cách chỉ định khóa bảng hoặc điều kiện hoặc bằng cách tìm các mục nhập trùng lặp. Nếu một bảng nội bộ có khóa không phải duy nhất và chứa các mục nhập trùng lặp, mục nhập đầu tiên từ bảng sẽ bị xóa.
Sau đây là cú pháp để sử dụng câu lệnh DELETE để xóa bản ghi hoặc dòng khỏi bảng nội bộ:
DELETE TABLE <internal_table> FROM <work_area_itab>.
Trong cú pháp trên, biểu thức <work_area_itab> là một vùng làm việc và nó phải tương thích với kiểu của bảng nội bộ <internal_table>. Thao tác xóa được thực hiện trên cơ sở khóa mặc định có thể được lấy từ các thành phần của vùng làm việc.
Bạn cũng có thể chỉ định một khóa bảng một cách rõ ràng trong câu lệnh DELETE TABLE bằng cách sử dụng cú pháp sau:
DELETE TABLE <internal_table> WITH TABLE KEY <K1> = <F1>………… <Kn> = <Fn>.
Trong cú pháp này, <F1>, <F2> .... <Fn> là các trường của một bảng bên trong và <K1>, <K2> .... <Kn> là các trường khóa của bảng. Câu lệnh DELETE được sử dụng để xóa các bản ghi hoặc dòng của bảng <internal_table> dựa trên các biểu thức <K1> = <F1>, <K2> = <F2> ... <Kn> = <Fn>.
Note - Nếu kiểu dữ liệu của các trường <F1>, <F2> .... <Fn> không tương thích với các trường khóa <K1>, <K2> ... <Kn> thì hệ thống SAP sẽ tự động chuyển đổi chúng thành định dạng tương thích.
Thí dụ
REPORT ZDELETE_DEMO.
DATA: BEGIN OF Line1,
ColP TYPE I,
ColQ TYPE I,
END OF Line1.
DATA mytable LIKE HASHED TABLE OF Line1
WITH UNIQUE KEY ColP.
DO 8 TIMES.
Line1-ColP = SY-INDEX.
Line1-ColQ = SY-INDEX + 4.
INSERT Line1 INTO TABLE mytable.
ENDDO.
Line1-ColP = 1.
DELETE TABLE mytable: FROM Line1,
WITH TABLE KEY ColP = 3.
LOOP AT mytable INTO Line1.
WRITE: / Line1-ColP, Line1-ColQ.
ENDLOOP.
Đoạn mã trên tạo ra kết quả sau:
2 6
4 8
5 9
6 10
7 11
8 12
Trong ví dụ này, mytable có hai trường, ColP và ColQ. Ban đầu, bảng của tôi có tám dòng, trong đó ColP chứa các giá trị 1, 2, 3, 4, 5, 6, 7 và 8. ColQ chứa các giá trị 5, 6, 7, 8, 9, 10, 11 và 12 bởi vì các giá trị ColP được tăng lên 4 mỗi lần.
Câu lệnh DELETE được sử dụng để xóa các dòng khỏi bảng của tôi trong đó giá trị của trường khóa ColP là 1 hoặc 3. Sau khi xóa, trường ColP của bảng của tôi chứa các giá trị 2, 4, 5, 6, 7 và 8, như được hiển thị trong đầu ra. Trường ColQ chứa các giá trị 6, 8, 9, 10, 11 và 12.