LOOP AT it_006.
READ TABLE it_006 INDEX ls_rows-index.
SELECT single rsnumb FROM zfit006
INTO chk_no_2
WHERE rsnumb eq it_006-rsnumb.
IF it_006-rsnumb EQ chk_no_2.
MESSAGE e001 WITH '존재하는 승인번호입니다 ! 저장에 실패했습니다!'.
REJECT. EXIT.
ENDIF.
ENDLOOP.
이걸로 겹쳐내는 승인번호는 찾아낼 수 있는데 테이블에 자료가 많아서
속도가 매우 느려지내요 ㅠㅠ
다른방법 없나요??ㅠㅠㅠ
댓글 4
-
기쁨
2010.11.10 18:56
SELECT문에 FOR ALL ENTRIES IN it_006 을 사용해보면 어떨까요? -
맨날초보
2010.11.10 19:00
DATA : BEGIN OF GT_zfit006 OCCURS 0,
rsnumb LIKE zfit006 -rsnumb.
DATA : END OF GT_zfit006.
SELECT RSNUMB
INTO GT_ZFIT006
FROM ZFIT006.
LOOP AT IT_006.
READ TABLE GT_ZFIT006 WITH KEY RSNUMB = IT_006-RSNUMB.
IF SY-SUBRC = 0.
MESSAGE e001 WITH '존재하는 승인번호입니다 ! 저장에 실패했습니다!'.
EXIT.
ENDIF.
ENDLOOP.
가급적 LOOP 안에서는 SELECT하는걸 지양해야됩니다. 속도가 저하되는 원인이거든요.
-
오렌지겅주님
2010.11.10 19:12
아... select를 밖으로 빼주면 되는군요...
고맙슴당 ! 수고하세요 ~!! ㅎㅎ
-
맑은하늘
2010.11.10 20:18
위 두분 말씀하고 코딩을 보니 대충 아래와 같은 로직으로 구현하시면 될 것 같습니다.
grid 리스트 중에 선택된 항목에 대하여 승인점검을 하시는 것 같네요.
좀더 나은 검색속도를 위해 index table 로 구현해 봤습니다.
도움되시길 바랍니다.
(대상 테이블이 없어서 테스트가 안되는 코드입니다. 로직만 참고하시면 될 것 같습니다)
DATA : BEGIN OF LS_ZFIT006,
RSNUMB LIKE ZFIT006-RSNUMB,
END OF LS_ZFIT006,
LT_ZFIT006 LIKE HASHED TABLE OF LS_ZFIT006
WITH UNIQUE KEY TABLE_LINE.
CLEAR LT_ZFIT006.
SELECT DISTINCT RSNUMB
INTO TABLE LT_ZFIT006
FROM ZFIT006
FOR ALL ENTRIES IN IT_006
WHERE RSNUMB = IT_006-RSNUMB.
GRID->GET_SELETED_ROWS( IMPORTING IT_ROWS = LT_ROWS ).
LOOP AT LT_ROWS INTO LS_ROWS.
READ TABLE IT_006 INDEX LS_ROWS-INDEX.
CHECK SY-SUBRC IS INITIAL.
READ TABLE LT_ZFIT006 TRANSPORTING NO FIELDS
FROM IT_006-RSNUMB.
CHECK SY-SUBRC IS INITIAL.
MESSAGE E001 WITH '존재하는 승인번호입니다 ! 저장에 실패했습니다!'.
RETURN.
ENDLOOP.