SAP/ABAP 기초

(ABAP) INTERNAL TABLE 정리 - 2

haramang 2021. 6. 14. 14:10

문바이님 블로그에서 가져온 자료입니다.

https://blog.daum.net/rightvoice/61

 

[Internal Table] 처리를 위한 명령어 정리표.

코딩시 주로 사용되는 명령어를 정리해 보았습니다 명령어 예제 설명 CLEAR CLEAR itab. (with header line) itab의 Header Line 만을 제거한다. CLEAR itab[]. (with header line) itab의 Body 만을 제거한다. CL..

blog.daum.net

 

명령 예제 설명
CLEAR CLEAR itab.  (with header line) itab의 Header Line 만을 제거한다.
CLEAR itab[]. (with header line) itab의 Body 만을 제거한다.
CLEAR itab.  (without header line) itab의 body를 제거한다.
FREE FREE itab. itab의 body의 내용이 제거된 후 . 해당공간의 메모리를 회수한다.
REFRESH REFRESH itab. itab의 body의 내용을 제거한다.
APPEND APPEND itab. itab의 header line의 내용을 가장마지막에 추가한다.
APPEND wa TO itab. wa를 itab의 가장마지막줄에 추가한다. [공통]
APPEND wa TO itab SORTED BY col2. wa를 itab의 마지막에 삽입후, col2로 [내림차순] 정렬을 수행한다
APPEND INITIAL LINE INTO itab. 초기화된값으로 마지막에 추가한다.
APPEND INITIAL LINE TO <itab> Assigning <wa>. 초기화된 값으로 <itab>에 추가한 다음 그 Row를 <wa>에 배정한다.
INSERT

Table Type상관없이
사용가능

Append
보다
Insert
사용권장
wa-carrid = 'UA'.
wa-connid = '0011'.
wa-cityfrom ='NY'.
INSERT wa INTO TABLE itab.
Structure[wa]에 데이타를 입력한다.
Internal Table[itab]에 wa를 반영한다.
wa-carrid = 'LH'.
wa-connid = '1111'.
wa-cityfrom ='NY'.
INSERT wa INTO TABLE itab. "
Structure[wa]에 데이타를 입력한다.
Internal Table[itab]에 wa를 반영한다.
INSERT spfli FROM itab
   ACCEPTING DUPLICATE KEYS.
itab의 내용을 spfli에 삽입할때 중복키를 허용한다.
INSERT wa INTO itab  INDEX 2. Standard Table의 경우 Index2번을 치고들어간다.
INSERT INITIAL LINE INTO itab INDEX1. 초기화된값으로 1번 row가 추가된다. 
INSERT TABLE itab. itab의 header line의 내용을 가장마지막에 추가한다.
INSERT LINES OF itab1
   FROM 1 TO 5 INTO TABLE itab2.
itab1의 (1~5번)내용을 itab2에 추가한다.
MODIFY

MODIFY =
 UPDATE +
INSERT
MODIFY TABLE itab FROM wa. itab 의 내용중 wa와 키값이 일치하는 첫번째 항목에 대해서 수정하라
MODIFY itab FROM wa
 TRANSPORTING 
col2
WHERE ( col2 > 30 ).
itab 의 내용을 wa로 변경.( col2 > 30 을 만족하는 항목에대해서)
MODIFY itab FROM wa INDEX 1. itab 의 내용을 wa로 변경.(INDEX = 1 인 항목만)
Modify itab FROM wa
TRANSPORTING fieldName1 fieldName2
 WHERE PK = 'ABC'  
itab의 일부내용을 일괄Update할 때 사용한다.
itab에서 PK= 'ABC'인 항목을 wa의 fieldname1~2만 갱신한다.
Where절을 넣지 않으면 오류가 발생함
Modify itab FROM wa
TRANSPORTING ('ERDAT') ('ERNAM')
   WHERE (lv_where) 
동적 Transporting의 사용
여러 Field지정시 String, itab등 사용하면 오류가 발생한다.
where절을 넣지 않으면 오류가 발생함
UPDATE UPDATE sflight SET price = '100'
  WHERE carrid = 'AZ'
      AND connid = '0011'.
Update의 사용방법은 일반적으로 같다.
COLLECT COLLECT wa INTO itab. itab의 구성원중 숫자형(i,f,p)을 제외한 것을 키값으로 간주,
추가 또는 합삽해주는 연산이다.
대상 자체가 많아지면 어느 순간 급격히 속도가 느려지므로, Loop로직적으로 처리하는 것이 유리할 때도 있다.
DELETE DELETE TABLE itab FROM wa. itab 의 내용중 wa와 키값이 일치하는 항목 삭제
DELETE itab
WHERE ( col2 > 30 OR col1 < 10 ).
itab 의 내용을 wa로 변경.( col2 > 30 을 만족하는 항목에대해서)
DELETE itab INDEX : 1,2,3. itab 의 내용중 INDEX (1,2,3) 인 항목만 삭제.
DELETE itab
WHERE field1 NOT IN so_object1
itab의 내용을 select-option[so_boejct1]에 속하지 않는것 삭제
SORT itab BY col1.
   DELETE ADJACENT
   DUPLICATES FROM 
itab
      COMPARING col1.
항상 정리하고자 하는 대상으로 우선 정렬을 먼저해야한다
itab 의 col1을 비교하여 중복되는 것을 삭제한다.
MOVE 'AZ    TO wa-carrid.
MOVE '0010' TO wa-connid.
DELETE sflight FROM wa.
WA의 키값을 가진항목을 삭제한다.
DELETE FROM sflight
  WHERE carrid = 'UA'.
DELETE의 DML사용법은 동일하다
SORT itab.
DELETE
   ADJACENT DUPLICATES FROM itab
   COMPARING ALL FIELDS.
itab으로 부터 모든 필드를 대상으로 모두동일하면 삭제한다.
DELETE
   ADJACENT DUPLICATES FROM itab
   COMPARING col1.
itab으로 부터 col1이 동일하면 그 이하는 모두 삭제한다.
SORT itab by key1 key2 key3.
DELETE ADJACENT DUPLICATES
  FROM itab.
Key값을 기준으로 itab에서 중복키를 모두 삭제하라
DELETE itab INDEX : 1,3. itab으로 에서 index 1인 항목을 삭제하라.!
변경된 itab으로 에서 index 3인 항목을 삭제하라.!
READ FIELD-SYSMBOLS <FS>.
ASSIGN COMPONENT fn1
   OF STRUCTURE p TO <FS>.
FIELD-SYMBOLS <FS> TYPE ANY TABLE.
ASSIGN itab TO <FS>.
READ TABLE <FS> WITH TABLE KEY
   (kname) = 'X' INTO wa.
<FS>임시변수를 선언한다.
이 변수는 어떠한 유형의 필드도 받을 수 있다.
READ TABLE itab FROM wa INTO wa. itab 의 내용중 wa와 키값이 일치하는 첫번째 항목에 대해서 읽어와라
READ TABLE itab WITH TABLE KEY col1 = 1
   INTO wa .
itab의 키값을 [eq]관계로 만족하는 단하나의 wa를 얻고자 할때사용.
wa-col2 = 'testdb'
READ TABLE itab INTO wa
   COMPARING col2.
itab의 키값을 [eq]관계로 만족하는 단하나의 wa를 얻고자 할때사용.
Comparing기능은 좀더 확인이 필요한 부분임.
READ TABLE itab WITH TABLE KEY col1 = 1
   INTO wa  TRASNPORTING col1.
itab의 키값을 [eq]관계로 만족하는 단하나의 wa를 얻고자 할때사용.
(wa에는 col1만이 데이타로 전달되고 나머지는 initial로 들어간다)
SORT itab BY col1
READ TABLE itab WITH TABLE KEY col1 = 1
   INTO wa TRASNPORTING col1
   BINARY SEARCH.
itab의 키값을 [eq]관계로 만족하는 단하나의 wa를 얻고자 할때사용.
(wa에는 col1만이 데이타로 전달되고 나머지는 initial로 들어간다)
(Binary search를 위해서 검색조건으로 정렬이 먼저되어야한다 / desending은 정렬시 찾지를 못하므로 주의해야한다.)
READ TABLE itab WITH TABLE KEY col1 = 1
   TRANSPORTING NO FIELDS
   BINARY SEARCH.
itab에 데이터가 있는지를 검사하는 Read문이다.
있는 경우 sy-subrc = 0을 돌려주고, sy-tabix 는 발견된
위치를 넣어준다.
READ TABLE itab INTO wa INDEX 5. itab 의 내용중 INDEX (5) 인 항목만 얻고자 할때
SORT SORT itab.
SORT itab DESCENDING BY land weight ASCENDING.
itab. [itab]의 기본키로 정렬을 수행한다.
itab의 land[내림차순]후, weight[오름차순] 정렬을 수행한다.
SORT itab.
SORT itab STABLE.
SORT itab DESCENDING BY land weight ASENDING.
SORT itab [ASCENDING|DESCENDING] [AS text][STABLE]
MOVE MOVE itab1[] TO itab2[]  (with header line) itab1과 itab2는 모두 동일한 Structure로 구성되어야 한다.
[] (대괄호)는 Header line의 경우 [body]를 의미한다.
MOVE itab1 TO itab2 (without header line) itab1과 itab2는 모두 동일한 Structure로 구성되어야 한다.
itab1에서 itab2로 데이타를 이동한다.
MOVE-CORRESPONDING wa1 TO wa2. wa1 wa2는 다른 배열의 구조체여도 상관없다.
이 명령어와 Loop at을 사용하면 itab의 내용을 쉽게 옴길수 있다.
[이 명령은 without header line 인 경우 활용하면 좋다.]
DESCRIBE DESCRIBE TABLE itab LINES lv_lin
   OCCURS lv_ini KIND lv_knd.
lv_lin = itab.RowCount.  lv_ini = inital Size
lv_knd = [sTandard , Hashed , Sorted ]
IF if itab1 = itab2. endif.
if itab1 > itab2. endif.
itab1[Rowcount] , itab2[Rowcount]를 비교한다.