Internal Table에 대한 설명입니다.
의외로 이 개념에 대하여 혼돈을 일으키시는 분들이 많으시더군요. 그래서 이것에 대한 개념을 명확히 해야겠다고 생각이 들어서 비록 명령문의 설명 중간이지만 이 개념을 설명하고자 합니다.
Table에 대한 개념은 다들 아시죠? (설마 이것두 모른신다면…????)
맞습니다. Table은 데이터들을 저장하는 곳이죠. 데이터베이스를 배우지 않으셔도 전산을 한달
SAP R/3에서는 테이블에 데이터를 입력하거나 변경하고자 할 때에는 Header라고 부르는, 또는 Header의 기능을 수행할 수 있는 Working Area에 일단 데이터를 가져온 다음 그 데이터를 수정하고, 변경된 데이터를 다시 테이블에 적용하는 방법을 가지게 됩니다. 자 그러면 Header라는 것은 무엇인가? 테이블의 레코드와 동일한 Size와 Type을 가지는 존재를 말합니다. 즉 테이블에 들어갈 수 있는 하나의 레코드라고 보시면 됩니다. 따라서 Header의 기능을 수행하는 Working Area라고 하는 것은 테이블의 레코드와 동일한 Size와 Type을 가지는 존재인 것이 되겠죠. 다시 한번 말씀드리지만 SAP R/3에서는 TABLE에 데이터를 변경, 삽입하는 것은 Header의 기능을 수행할 수 있는 Working Area가 있어야 합니다.
자 이제 SAP R/3에서의 데이터가 삽입/변경되는 과정을 이해 하셨으면 INTERNAL TABLE이 무엇인지를 확인 해야겠죠? 테이블은 물리적인 존재입니다. 즉 하드디스크 상에 영구적으로 존재하는 것이죠. INTERNAL TABLE은 프로그램이 실행되고 있는 동안 생성되는 TEMP의 성격인 테이블입니다. 물론 이것도 하나의 테이블로 취급됩니다. 즉 앞에서 설명한 TABLE에서의 삽입/변경과정이 동일하다는 것이죠.
정리하겠습니다.
메모리 영역과 하드디스크(DBMS)영역에 테이블이 존재할 수 있습니다. 메모리 영역에서 생성되는 테이블은 프로그램이 실행되면 생겨나는 것이며 하드디스크 영역에 있는 테이블은 프로그램의 실행과는 무관하게 존재하는 테이블입니다.
메모리 영역에서 사용하는 테이블은 INTERNAL TABLE이라고 부르며 하드디스크에서 사용하는 테이블은 TABLE또는 TRANSPARENT TABLE이라고 부릅니다. 메모리 영역이든, 하드디스크 영역이든 모든 테이블은 삽입/변경하는 과정은 HEADER라고 부르는 특별한 존재를 통하여 가능합니다. 하드디스크의 Table을 사용하려면 Tables명령으로 Header를 선언하여 처리합니다. Internal Table은 Data문을 통하여 Header를 선언하여 처리합니다. 하드디스크 영역에 존재하는 테이블을 생성하기 위해서는 SE11 Transaction을 통하여 생성해 주셔야 합니다. 물론 DBMS Level에서 SQL문을 통하여 생성할 수 있습니다.
다음의 그림은 SE11 Transaction의 화면입니다.
[그림 1-1: SE11화면]
하지만 메모리 영역의 Internal Table은 프로그램의 Data문에 의하여 생성됩니다.
다음은 Data 명령문을 통한 Internal Table 생성 예제입니다.
Header Line이 있는 것과 없는 것을 구분하여 설명드립니다.
Tables: MARA. “MARA의 Header 역할을 하는 Working Area생성.
Data: BEGIN OF IT_MARA OCCURS 0.
INCLUDE STRUCTURE MARA.
Data: END OF IT_MARA. “ Header가 기본적으로 생성됨.
Data: IT_MARA_N LIKE TABLE OF MARA. “ Header가 없는 Internal Table.
Data: IT_MARA_H LIKE TABLE OF MARA WITH HEADER LINE.
“ Header가 있는 Internal Table.
[출처] Chapter2. Internal Table|작성자 와니