티스토리 뷰

개발/개발 자료

인터널 테이블(Internal Table)

시원한물냉 2014. 11. 20. 09:38

 

* 인터널 테이블이란 ?

디비에서 가져온 데이터를 테이블 단위로 프로그램에서 핸들링 하기 위해서 사용하는 버퍼같은 테이블이다.


* 인터널 테이블을 사용하는 이유?

예를들어 select endselect와 같은 구문을 사용하게 되면 DB에 계속 접근하여 하나씩 레코드를 가져오는데,

DB에 자주 접근할 수록 퍼포먼스가 안좋아지기때문에 최초 접근할때 한번에 DB단에서 어플리케이션 단으로 데이터를 모두 가져오고

어플리케이션 단에서 처리할 수 있도록 하면 더 효율적이기 때문이다.

 

 

인터널 테이블의 종류 

1. 스탠다드 테이블 (standard table)

2. 소티드 테이블 (sorted table )

3. 해시드 테이블 (hashed table)


인터널 테이블은 위의 3가지로 나뉘는데 default는 스탠다드 테이블이다.
또한 소티드 테이블은 이미 정렬되어있기 때문에 sort 명령어를 사용할 수 없으며,
인터널 테이블은 프로그램 영역이라 프로그램이 종료되면 안에 있던 값들은 모두 사라진다.


단일값과 다중값 적용 예제

 DATABEGIN OF gs_person,

            id TYPE n LENGTH 4,
            name TYPE LENGTH 15,
      END OF gs_person.     "data object 선언

DATAgt_person LIKE TABLE OF gs_person"gs_person과 같은 라인 타입을 가지는 테이블을 만들어라.

gs_person-id '0001'.
gs_person-name 'Steve'.

APPEND gs_person TO gt_person.

gs_person-id '0002'.
gs_person-name 'Cathey'.

INSERT gs_person INTO TABLE gt_person.

gs_person-id '0003'.
gs_person-name 'Lilly'.

INSERT gs_person INTO gt_person INDEX 2"해시테이블에선 error 해시는 index 사용 X라서
  "index를 넣으면 into 다음에 table 안넣어도 됨 !
CLEAR gs_person"gs_person 을 clear
READ TABLE gt_person INTO gs_person
      WITH KEY id '0003'.

"꼭 값이 들어왔는지 확인해라 !!  read를 사용하는 경우
IF sy-subrc 0.
  WRITE:/ gs_person-idgs_person-name.
ENDIF.

delete gt_person WHERE id '0002'.


LOOP AT gt_person INTO gs_person.
  WRITE:/ gs_person-id,
         gs_person-name.

ENDLOOP.


"조건 주기
LOOP AT gt_person INTO gs_person where id '0003'.
  WRITE:/ gs_person-id,
          gs_person-name.

ENDLOOP.

 

 

 

 

인터널 테이블은 예전에 

internal table with header line 이라고 하여 인터널 테이블과 헤더 라인을 선언하여 사용했었다.

 

따로 work area를 설정해 주지 않아도 자동으로 선언되어 편리하지만 

동일한 이름으로 선언되어 사용자 입장에서는 이 변수명이 work area인지 아니면 internal table인지 

헷갈리는 경우가 많아서 지금은 internal table without header line 이라고 하여 

헤더라인을 선언하지 않고 인터널 테이블과 work area를 선언하여 사용한다.

 

하지만 아직도 internal table with header line을 지원하여 이 것으로 개발하는 사람들도 있으니

알아두는 것이 좋다.

 

 internal table without header line 은 clear 하면 테이블의 데이터가 삭제되지만,

with header line에서는 테이블이 아닌 헤더라인의 데이터가 삭제된다. 

 

이것때문에 주의해야할 사항이 있는데

 

ALV 메서드에서 간혹 with header line 처럼 선언 해 놓은 것을 잊고 그냥 clear 변수명 을 하는데 

이렇게 되면 table 타입이 아니라 structure 타입으로 넘어가기 때문에 에러가 난다. 

만약 with header line에서 테이블을 넘기고 싶다면' 테이블명[] '  처럼 대괄호 두개를 

뒤에 붙여주면 된다.

 

 

internal table with header line 예제

 DATA: gt_scarr TYPE TABLE OF scarr WITH HEADER LINE. "internal table과 header line도 모두 선언된것 !

 

SELECT * FROM scarr

  INTO TABLE gt_scarr.

 

LOOP AT gt_scarr. "work area와 이름이 같아서 into work area 안쓴다!

  WRITE:/ gt_scarr-carrid.

 

ENDLOOP.

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함