READ TABLE ... INTO / DO~ENDDO. / VALUE / SY-INDEX / DESCRIBE

홍예림·2023년 7월 11일
0

SAP ABAP(개편중...)

목록 보기
24/55

참고자료 : https://blog.naver.com/howwithus/221485003683

READ TABLE ... INTO ~ INDEX n

  • 인터널테이블의 특정 레코드(열) 1개 가져오기.
 READ TABLE <ITAB> INTO <WQ(스트럭처etc...)> INDEX <인덱스번호> 
  • 가장 첫 번째 값을 리턴한다.
  • 인터널테이블 전용
    • 딕셔너리 테이블의 읽어오기
      : 여러개 데이터 SELECT, 한 개 데이터 SELECT SINGLE
    • 인터널 테이블의 읽어오기
      : 여러개 데이터 LOOP, 한 개 데이터 READ TABLE
  • 인덱스는 인터널테이블 생성 시 자동 생성된다.

찾기 조건 : WITH KEY

 READ TABLE <ITAB> INTO <WQ(스트럭처etc...)> WITH KEY <조건> 
  • 조건을 만족하는 가장 첫번째 레코드를 리턴한다.
  • AND 조건만 사용 가능하며, AND 수식은 생략 가능.
  • STANDARD TABLE에 사용
    • HASHED TABLE,SORTED TABLE에서는 WITH TABLE KEY를 사용한다.

DO ~ ENDDO.

DO <횟수> TIMES.
	<실행문>
ENDDO.
  • 인터널 테이블과 무관하게 반복하고 싶을때 사용한다.

VALUE

  • 변수의 초기값 설정

반복횟수는 변수로 지정 가능

SY-INDEX

참고 : http://sapjoy.co.kr/index.php?mid=abapqna&document_srl=8912&m=0

  • SY-TABIX : 인터널 테이블의 라인 번호 - 현재라인
    • 다른 구문의 영향을 받아 계속해서 변경된다.
  • SY-INDEX : 현 루프 구문의 횟수

DESCRIBE TABLE ... LINES ~.

DESCRIBE TABLE <ITAB> LINES <WQ(변수, 스트럭처etc...)>.
  • ITAB의 행이 몇 개인지 구해서 WQ에 할당해라.

실습 문제

1)

문제

풀이

*1)
DATA : BEGIN OF gs_fli,
        carrid    TYPE scarr-carrid,
        carrname  TYPE scarr-carrname,
        connid    TYPE spfli-connid,
        countryfr TYPE spfli-countryfr,
        cityfrom  TYPE spfli-cityfrom,
        airpto    TYPE spfli-airpto,
        cityto    TYPE spfli-cityto,
       END OF gs_fli,
*2)
       gt_fli LIKE TABLE OF gs_fli.

CLEAR   : gs_fli.
REFRESH : gt_fli.

*3)
SELECT a~carrid a~carrname
       b~connid b~countryfr b~cityfrom b~airpto
  INTO CORRESPONDING FIELDS OF TABLE gt_fli
  FROM scarr AS a
 INNER
  JOIN spfli AS b
    ON a~carrid = b~carrid
 WHERE a~carrid IN ('AA','AZ','DL').

*4)
LOOP AT gt_fli INTO gs_fli.

  IF gs_fli-cityfrom EQ 'ROME'.

    gs_fli-cityfrom = 'SEOUL'.

  ENDIF.
*5)
  IF gs_fli-cityto = 'FRANKFURT'.

    gs_fli-airpto = 'INCHEON'.

  ENDIF.
ENDLOOP.
*6)
DO 5 TIMES.

  READ TABLE gt_fli INTO gs_fli INDEX sy-index.
  WRITE : gs_fli-carrid, gs_fli-carrname, gs_fli-connid,/.

ENDDO.

1-2)

문제

1번 풀이 코드를 바탕으로, 인터널테이블 레코드 수 만큼 루프문 돌리기

풀이

DATA : gv_cnt TYPE p VALUE 0.

LOOP AT gt_fli INTO gs_fli.
  gv_cnt = sy-tabix. " ---->동일하다  gv_cnt = gv_cnt + 1.
ENDLOOP.

WRITE : gv_cnt.

DO gv_cnt TIMES.

  READ TABLE gt_fli INTO gs_fli INDEX sy-index.
  WRITE : gs_fli-carrid, gs_fli-carrname, gs_fli-connid,/.

ENDDO.
profile
SYNC 5반 2023.07 - 2023.12

0개의 댓글