1. 일단 DB 에서 데이타를 가지고 오는 부분입니다.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE gt_display
FROM spfli
WHERE carrid IN s_carr.
2. P_NAME 이 뭔지는 모르겠지만 항공사 이름이라고 칩시다
항공사 이름을 조회조건에 PARAMETER로 P_NAME 이라고 선언했는데
항공사 이름 값이 있으면.. 즉 조회조건에 'AA' 라고 입력 했으면 'AA%' 로 변경합니다.
이렇게 'AA'와 '%'의 문자열을 합치는 것이 CONCATENATE 명령어 입니다.
이것은 DB 에 QUERY 를 날릴때 'AA'로 시작하는 모든 값을 가지고 오라는 뜻입니다.
IF p_name EQ space.
p_name = '%'.
ELSE.
CONCATENATE p_name '%' INTO p_name.
ENDIF.
3. 다시 이걸로 DB 에서 뭘또 가지고 오네요.. ^^*
P_NAME 에는 'AA%' 가 들어있다고 치면 %의 경우는 IN 이나 EQ 가 아닌 LIKE 로 조건절에 넣어야 합니다.
SELECT carrid carrname
INTO TABLE gt_scarr
FROM scarr
WHERE carrid IN s_carr
AND carrname LIKE p_name.
4. GT_DISPLAY 에 CARRNAME 값을 넣고 있네요
IF NOT gt_display[] IS INITIAL.
DESCRIBE TABLE gt_display LINES l_line.
LOOP AT gt_display.
READ TABLE gt_scarr WITH KEY carrid = gt_display-carrid.
IF sy-subrc EQ 0.
gt_display-carrname = gt_scarr-carrname.
ENDIF.
MODIFY gt_display.
ENDLOOP.
ENDIF.
명령어등은 F1 을 눌러서 확인해 보시면 자세히 설명이 나옵니다...
영어로 --;;;;
댓글 4
-
초보아밥퍼
2009.03.07 01:08
-
로미오
2009.03.07 01:29
답변감사합니다. 다른 것은 이해가 가는데 4번 내용에 대해 좀 더 설명이 필요할것 같아서 추가질문드립니다.
1. IF NOT gt_display[] IS INITIAL 에서 initial를 체크하는 이유가 뭔가요?
2. DESCRIBE TABLE gt_display LINES l_line.는 gt_display 테이블의 line수를 체크하는 것으로 알고 있는데
없어도 상관없죠? 만약에 꼭 필요하다면 왜 꼭 필요한지 이해가 않가서 설명부탁합니다.
3. loop와 endloop문장 안에 있는 소스는 gt_scarr-carrnames를 gt_display-carrname안에 넣기 위해서만
사용한 소스인가요? 아니면 다른 또 다른 이유가 있는지요?
명령어는 알겠는데 왜 이렇게 적성한지 이해가 않가서 추가설명부탁합니다.
-
StoryGuy97™
2009.03.07 02:26
1. if 안의 loop 문을 수행하는 이유는 gt_display 와 gt_scarr의 항공사 id (carrid)를 비교해서 동일한 것이 있으면
gt_display_carrname 에 gt_scarr-carrname 값을 넣어주기 위함입니다.
근데 gt_display 에 값이 없다면 비교할 이유가 없지요~~
그래서 initial 을 비교합니다.
2. 저거는 보통 데이터가 있을 경우 화면에 뿌리고 "총 100 건의 데이터가 조회되었습니다" 라고 뿌릴때 사용하려고 담아둡니다.
더 아래쪽에 보시면 아마 l_line 을 사용하는 부분이 있을 겁니다.
3. 말 그대로 입니다. 맞습니다. 그리고 1번 설명도 참조하세요
-
로미오
2009.03.09 23:10
감사합니다.
친절한 스토리가이님 ^^