[ABAP] BINARY SEARCH

펭귄안녕·2025년 4월 23일

abap

목록 보기
9/14

BINARY SEARCH

이진 탐색 :

  • 정렬된 내부 테이블에만 사용할 수 있다.
  • 동일한 레코드중 첫번째를 찾아준다.
  • 같은 조건을 만족하는 데이터가 여러 개 있을 때 첫 번째로 일치하는 데이터를 찾고, 그 이후에는 더 이상 다른 데이터를 찾지 않게 된다는 뜻.
  CLEAR: GT_ZPDCT5003, GT_ZPDCT5003[].

  SELECT * INTO TABLE GT_ZPDCT5003
    FROM ZPDCT5003
   WHERE SHPNO  IN R_PSPID
     AND NETEST EQ G_NETEST
     AND LOTNO  IN R_LOT
     AND BLK_NO IN R_BLOCK
     AND STATUS <> '3'
   ORDER BY SHPNO NETEST LOTNO BLK_NO MTYPE SER PART_NO.

ZPDCT5003 테이블에서 조건에 만족하는 데이터들을
GT_ZPDCT5003에 저장

// 5155에 들어온 데이터가 임시로 저장되는 곳이 tempo5155
// gs_display1은 헤드 그리드의 정보 
// 헤드의 정보와 비교해서 해당 데이터의 상세정보를 보여주는 5155
  LOOP AT GT_TEMPO5155 WHERE SHPNO  EQ GS_DISPLAY1-SHPNO
                         AND NETEST EQ G_NETEST
                         AND LOTNO  EQ GS_DISPLAY1-LOTNO
                         AND BLK_NO EQ GS_DISPLAY1-BLK_NO
                         AND MTYPE  EQ GS_DISPLAY1-MTYPE
                         AND SCREEN EQ 'X'.
    CLEAR  GT_DISPLAY2.

//헤드에서 클릭된 값과 같은 데이터들을 5003에서 찾기 
    READ TABLE GT_ZPDCT5003 WITH KEY SHPNO   = GT_TEMPO5155-SHPNO
                                     NETEST  = GT_TEMPO5155-NETEST
                                     LOTNO   = GT_TEMPO5155-LOTNO
                                     BLK_NO  = GT_TEMPO5155-BLK_NO
                                     MTYPE   = GT_TEMPO5155-MTYPE
                                     SER     = GT_TEMPO5155-SER
                                     PART_NO = GT_TEMPO5155-PART_NO
                                     BINARY SEARCH.
    IF SY-SUBRC = 0. " 데이터가 있으면

      CONCATENATE GT_ZPDCT5003-ZZWKOBJ
                  GT_ZPDCT5003-ZZWKSTG2
                  GT_ZPDCT5003-ZZWKTYP2
                  GT_ZPDCT5003-ZZWKTYP_DTL2
             INTO GT_TEMPO5155-ACTIVITY.

      MOVE-CORRESPONDING GT_TEMPO5155 TO GT_DISPLAY2.
    ENDIF.
  • with key SHPNO = GT_TEMPO5155-SHPNO 에서
    GT_TEMPO5155-SHPNO 의 중간값부터 비교를 시작하고
    정렬된 순서에서 SHPNO 보다 높으면 위로 낮으면 밑으로 비교를 시작
    그래서 빠르다고 하네요~..

select 할 때 order by 한 정렬 순서나
sort 한 정렬 순서와
read table 에서 with key 의 정렬 순서가 같아야 데이터가 제대로 조회된다.

디버깅해보는데 tempo5155에 값은 똑바로 들어오고
5003에도 해당 데이터가 있는데 SY-SUBRC 가 계속 4가 뜨길래
뭐지뭐지 했는데
ㅎㅎ order by 순서와 with key 순서가 달라서였다.

0개의 댓글