SAP Bảng nội bộ ABAP: Tạo, đọc, điền, sao chép và xóa

Bảng nội bộ là gì?

BẢNG NỘI BỘ được sử dụng để lấy dữ liệu từ một cấu trúc cố định để sử dụng động trong ABAP. Mỗi dòng trong bảng nội bộ có cùng cấu trúc trường. Công dụng chính của bảng nội bộ là để lưu trữ và định dạng dữ liệu từ bảng cơ sở dữ liệu trong một chương trình.

Khu vực làm việc là gì?

Khu vực làm việc là những hàng dữ liệu đơn lẻ. Chúng phải có cùng định dạng với bất kỳ bảng nội bộ nào. Nó được sử dụng để xử lý dữ liệu trong một bảng nội bộ mỗi lần một dòng.

Sự khác biệt giữa bảng nội bộ và khu vực làm việc?

Một bức tranh nói một ngàn chữ

Sự khác biệt giữa bảng nội bộ và khu vực làm việc

Các loại bảng nội bộ

Có hai loại bảng nội bộ.

  1. Các bảng nội bộ có dòng HEADER
  2. Các bảng nội bộ không có dòng HEADER.

Bảng nội bộ có dòng tiêu đề

  • Tại đây hệ thống tự động tạo vùng làm việc.
  • Vùng làm việc có cùng kiểu dữ liệu với bảng nội bộ.
  • Vùng làm việc này được gọi là dòng HEADER.
  • Tại đây tất cả các thay đổi hoặc bất kỳ hành động nào đối với nội dung của bảng đều được thực hiện. Do đó, các bản ghi có thể được chèn trực tiếp vào bảng hoặc truy cập trực tiếp từ bảng nội bộ.

Bảng nội bộ không có dòng tiêu đề :

  • Ở đây không có vùng làm việc nào được liên kết với bảng.
  • Vùng làm việc phải được chỉ định rõ ràng khi chúng ta cần truy cập vào các bảng đó.
  • Do đó các bảng này không thể được truy cập trực tiếp.

Tạo bảng nội bộ

Có nhiều cách để tạo Bảng nội bộ. Hãy nhìn vào chúng từng cái một-

1.Bằng cách sử dụng câu lệnh kiểu

Bây giờ chúng ta hãy tạo một bảng nội bộ itab bằng cách sử dụng câu lệnh LOẠI.

Cú pháp là –

Types : begin of line,

column1 type I,

column2 type I,

end of line.

Ví dụ:

TYPES : begin of line,

empno		type I,

empname(20)   	type c	,

end of line.

Câu lệnh TYPES tạo ra một dòng cấu trúc như được xác định.

Để thực sự tạo một Bảng nội bộ itab, hãy sử dụng lệnh sau:

Data itab type line occurs 10.

Một bảng nội bộ itab được tạo với cấu trúc của dòng. Ngoài việc khai báo cấu trúc của một bảng nội bộ, mệnh đề OCCURS còn xác định số lượng mục trong bảng được duy trì trong bộ lưu trữ chính (trong trường hợp này là 10). Các bản ghi bổ sung được ghi vào khu vực phân trang và có thể ảnh hưởng đến hiệu suất

2.Bằng cách tham khảo Bảng khác

Bạn có thể tạo bảng nội bộ bằng cách tham khảo bảng hiện có. Bảng hiện có có thể là một tiêu chuẩn SAP bảng, bảng Z hoặc bảng nội bộ khác.

Cú pháp-

Data <f> <type> [with header line].

Thí dụ-

DATA itab TYPE line OCCURS 10 with header line.

Ở đây, một bảng nội bộ itab được tạo từ dòng loại có dòng tiêu đề. Xin lưu ý “với dòng tiêu đề” là tùy chọn.

3. Bằng cách tham khảo Cấu trúc hiện có

Cú pháp-

Data	<f> LIKE <struct> occurs n [with header line].

Thí dụ-

DATA itab LIKE sline OCCURS 10.

Ở đây, bảng itab được tạo có cấu trúc giống như bảng sline

4.Bằng cách tạo Cấu trúc mới

Bây giờ chúng ta hãy tạo một bảng nội bộ với cấu trúc của riêng mình. Ở đây bảng được tạo bằng dòng Tiêu đề, theo mặc định.

Cú pháp -

Data : Begin of <f> occurs <n>,

<component declaration>,

.................................,

End of <f>.

Thí dụ -

Data : Begin of itab occurs 10,

column1       type I,

column2(4)  type C,

column3      like  mara-ernam,

End of itab.

Bảng nội bộ itab được tạo

Điền vào các bảng nội bộ

Bây giờ chúng ta đã tạo thành công một số bảng nội bộ, hãy xem cách chúng ta điền một số bản ghi vào chúng. Có nhiều phương pháp khác nhau để điền vào bảng

1. Nối dữ liệu theo dòng

Phương pháp đầu tiên có sẵn là sử dụng câu lệnh APPEND.

Sử dụng câu lệnh APPEND, chúng ta có thể thêm một dòng từ vùng làm việc khác vào bảng nội bộ hoặc chúng ta có thể thêm một dòng ban đầu vào bảng nội bộ..

Cú pháp -

APPEND [<wa> TO / INITIAL LINE TO] <itable>.

Tại đây khu vực làm việc hoặc Dòng ban đầu được thêm vào bảng nội bộ .

Biến hệ thống SY-TABIX chứa chỉ mục của dòng được nối thêm.

Ví dụ:

Data: Begin of itab occurs 10,

col1 type C,

col2 type I,

end of itab.

Append initial line to itab.

Kết quả : '' '0'

Các dòng ban đầu thêm một dòng được khởi tạo với giá trị chính xác cho loại của nó vào bảng. Ở đây, col1 là một ký tự và col2 là một số nguyên. Sau đó, APPEND dòng ban đầu, thêm một dòng được khởi tạo tương ứng với kiểu dữ liệu của các cột, tức là khoảng trắng cho col1 và 0 cho col2.

2.Sử dụng câu lệnh THU THẬP

THU THẬP là một dạng câu lệnh khác được sử dụng để điền vào các bảng nội bộ. Nói chung COLLECT được sử dụng khi chèn các dòng vào bảng nội bộ bằng khóa tiêu chuẩn duy nhất.

Cú pháp-

COLLECT [<wa> INTO] <itable>.

Trong trường hợp các bảng có dòng Tiêu đề, tùy chọn INTO bị bỏ qua. Giả sử đã có một mục nhập có khóa giống với mục bạn đang cố gắng thêm vào thì một dòng mới sẽ không được thêm vào bảng, nhưng các trường số của cả hai mục nhập đều được thêm vào và chỉ có một mục nhập tương ứng với khóa đó. . Giá trị của SY-TABIX được thay đổi thành hàng của mục nhập ban đầu. Ngược lại, COLLECT hoạt động tương tự như APPEND và SY-TABIX chứa chỉ mục của dòng được xử lý.

3.Sử dụng câu lệnh INSERT

Câu lệnh INSERT thêm một dòng/vùng làm việc vào bảng bên trong. Bạn có thể chỉ định vị trí mà dòng mới sẽ được thêm bằng cách sử dụng mệnh đề INDEX với câu lệnh INSERT.

cú pháp

INSERT [<wa> INTO / INITIAL LINE INTO] <itable> [index <idx>].

Tại đây, khu vực làm việc hoặc DÒNG BAN ĐẦU được chèn vào bảng nội bộ tại chỉ mục .

Sao chép bảng nội bộ

Nội dung của một bảng bên trong có thể được sao chép sang bảng khác bằng cách sử dụng câu lệnh APPEND LINES hoặc INSERT LINES. Một cách đơn giản hơn là sử dụng bất kỳ cú pháp nào sau đây.

MOVE  <itab1> To <itab2>.

OR

<itab1> = <itab2>.

Chúng sao chép nội dung của ITAB1 sang ITAB2. Trong trường hợp các bảng nội bộ có dòng tiêu đề, chúng ta phải sử dụng [] để phân biệt với khu vực làm việc. Vì vậy, để sao chép nội dung của các bảng nội bộ có dòng tiêu đề, cú pháp sẽ trở thành:

itab1[] = itab2[].

Đọc bảng nội bộ

Bây giờ chúng ta đã quen với việc tạo các bảng nội bộ và điền dữ liệu vào chúng. Bây giờ chúng ta sẽ xem cách chúng ta thực sự sử dụng dữ liệu hoặc truy xuất dữ liệu từ các bảng nội bộ.

1. Sử dụng Loop -Endloop

Một trong những cách truy cập hoặc đọc bảng nội bộ là sử dụng LOOP-ENDLOOP.

cú pháp

LOOP AT <itable> [INTO <wa>]

...................................

ENDLOOP.

Ở đây khi bạn nói LOOP AT ITABLE thì bảng bên trong ITABLE sẽ được đọc từng dòng. Bạn có thể truy cập các giá trị của các cột cho dòng đó trong bất kỳ phần nào của cấu trúc LOOP-ENDLOOP. Giá trị của SY-SUBRC được đặt thành 0, ngay cả khi chỉ có một bản ghi được đọc.

2. Sử dụng ĐỌC

Phương pháp khác để đọc bảng nội bộ là sử dụng câu lệnh READ.

Cú pháp-

READ TABLE <itable> [INTO <wa>] INDEX <idx>.

Câu lệnh này đọc dòng hiện tại hoặc dòng được chỉ định bởi chỉ mục . Giá trị của SY-TABIX là chỉ số của dòng được đọc. Nếu tìm thấy mục nhập có chỉ mục được chỉ định thì SY-SUBRC được đặt thành 0. Nếu chỉ mục được chỉ định nhỏ hơn 0 thì sẽ xảy ra lỗi thời gian chạy. Nếu chỉ mục được chỉ định vượt quá kích thước bảng thì SY-SUBRC được đặt thành 4.

Xóa bảng nội bộ

Có nhiều cách để xóa dòng khỏi bảng nội bộ.

1.Xóa các dòng trong một vòng lặp.

Đây là cách đơn giản nhất để xóa dòng.

cú pháp

DELETE <ITABLE>.

Câu lệnh này chỉ hoạt động trong một vòng lặp. Nó xóa dòng hiện tại. Bạn có thể xóa các dòng trong vòng lặp có điều kiện bằng cách thêm Mệnh đề WHERE.

2.Xóa dòng bằng cách sử dụng chỉ mục.

Điều này được sử dụng để xóa một dòng khỏi bảng nội bộ tại bất kỳ chỉ mục nào đã biết.

cú pháp

DELETE <ITABLE> INDEX <IDX>.

Dòng có chỉ số bị xóa. Chỉ số của dòng tiếp theo giảm đi 1.