티스토리 뷰
* 인터널 테이블이란 ?
디비에서 가져온 데이터를 테이블 단위로 프로그램에서 핸들링 하기 위해서 사용하는 버퍼같은 테이블이다.
* 인터널 테이블을 사용하는 이유?
예를들어 select endselect와 같은 구문을 사용하게 되면 DB에 계속 접근하여 하나씩 레코드를 가져오는데,
DB에 자주 접근할 수록 퍼포먼스가 안좋아지기때문에 최초 접근할때 한번에 DB단에서 어플리케이션 단으로 데이터를 모두 가져오고
어플리케이션 단에서 처리할 수 있도록 하면 더 효율적이기 때문이다.
* 인터널 테이블의 종류
1. 스탠다드 테이블 (standard table)
2. 소티드 테이블 (sorted table )
3. 해시드 테이블 (hashed table)
DATA: BEGIN OF gs_person, id TYPE n LENGTH 4,name TYPE c LENGTH 15, END OF gs_person. "data object 선언 DATA: gt_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-id, gs_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. |
'개발 > 개발 자료' 카테고리의 다른 글
(Android) TextView에 Marquee기능 넣기 (텍스트뷰 흐르는 효과 만들기) (0) | 2014.12.20 |
---|---|
(Android) 슬라이딩 메뉴 만들기 라이브러리 (0) | 2014.12.10 |
알아두면 좋은 날짜관련 함수 (0) | 2014.10.30 |
알아두면 좋은 시스템변수 (0) | 2014.10.30 |
(Android) 로딩화면 몇초 후에 넘어가게 하기 (0) | 2014.10.19 |