ZSAILING_T_001
ZCUSTOM_T_001
테이블 안에 있는 데이터를 KEY를 가지고 비교하여
가져오려 하는데요. 잘 안풀려서요
아직 OPEN SQL도 초보인지라 잘 못쓰고 있습니다.
SQL부분이 잘못된거 같은데 어떻게 써야할지 잘 모르겠습니다.
로직은 조회부분만 보여드릴게요.
FORM serch_data.
CASE ok_code.
WHEN 'SERCH'.
IF gs_zsailing_s_001-io <> 0 AND gs_zsailing_s_001-dyseq <> 0
AND gs_zcustom_s_001-buino <> 0.
COMMIT WORK.
ELSE.
ROLLBACK WORK.
MESSAGE i001(00) WITH '필수 항목에 0 보다 큰수를 입력하세요'.
CLEAR : gs_zsailing_s_001-io, gs_zsailing_s_001-dyseq,
gs_zcustom_s_001-buino.
LEAVE TO SCREEN '2000'.
ENDIF.
SELECT *
INTO IT_DATA
FROM ZSAILING_T_001.
SELECT *
INTO IT_DATA2
FROM ZCUSTOM_T_001.
ENDSELECT.
ENDSELECT.
IF gs_zsailing_s_001-io = it_data-io AND
gs_zsailing_s_001-dyseq = it_data-dyseq AND
gs_zcustom_s_001-buino = it_data2-buino.
MESSAGE i001(00) WITH '중복된 KEY가 있습니다.'.
ELSE.
MESSAGE i001(00) WITH '데이터를 입력 하시겠습니까?.'.
CALL SCREEN '2100'.
ENDIF.
ENDCASE.
ENDFORM. " serch_data
댓글 7
-
e-abap
2007.05.22 22:13
-
e-abap
2007.05.22 23:08
또는
read table it_data with key io = gs_zsailing_s_001-io dyseq = gs_zsailing_s_001-dyseq ....
if sy-subrc eq 0.
MESSAGE i001(00) WITH '중복된 KEY가 있습니다.'.
ELSE.
MESSAGE i001(00) WITH '데이터를 입력 하시겠습니까?.'.
CALL SCREEN '2100'.
endif.
-
鵬의 날개
2007.05.22 23:42
음...상기 로직은 데이터가 인터널 테이블에 담기지 않을것 같군요...
select....endselect. 로 데이터를 가지고 오시려면 append itab. 을 먼저 하셔야 할것 같구요...
키값 비교를 하기 위한 부분도 e-abap님 말씀처럼 loop...endloop. 돌면서 하셔야 될것 같군요...
-
鵬의 날개
2007.05.22 23:53
키값으로 데이터를 가지고 오고 싶다면...
data : itab1 like ZSAILING_T_001 occus 0 with header line,
itab2 like ZCUSTOM_T_001 occurs 0 with header line.
select *
into corresponding fields of table itab1
from ZSAILING_T_001
where 키 필드 = 조건필드.
select *
into corresponding fields of table itab2
from ZCUSTOM_T_001
where 키 필드 = 조건필드.
이러케 하면 itab1 과 itab2 에 조건에 해당하는 데이터가 들어가게 됩니다...
이 둘을 비교해 동일한 키값인지 아닌지 비교하고 싶으면...
loop at itab1.
read table itab2 with key buino = itab1-buino.
if sy-subrc = 0.
message i001(00) with '중복된 키값이 있습니다.'.
else.
call screen '2100'.
endif.
endloop.
이런식으로 itab1 과 itab2 를 비교할 수 있습니다...
read 할때 비교할려는 키 값에 따라 소팅후 binary search하면 더욱 좋겠구요...
-
아밥초보~
2007.05.23 18:47
만약에 ENDSELECT 가 퍼포먼스가 떨어지지만 저렇게 하고 싶다고 하시면..-_-;;
SELECT *
INTO IT_DATA
FROM ZSAILING_T_001.
SELECT *
INTO IT_DATA2
FROM ZCUSTOM_T_001.
IF gs_zsailing_s_001-io = it_data-io AND
gs_zsailing_s_001-dyseq = it_data-dyseq AND
gs_zcustom_s_001-buino = it_data2-buino.
MESSAGE i001(00) WITH '중복된 KEY가 있습니다.'.
ELSE.
MESSAGE i001(00) WITH '데이터를 입력 하시겠습니까?.'.
CALL SCREEN '2100'.
ENDIF.
ENDSELECT.
ENDSELECT.
ENDSELECT 로직 정말 오랜만에 보내요..
-
신정일
2007.05.24 13:44
아밥초보님 죄송하지만 제가 초보라서 ENDSELECT문 말고 퍼포먼스 적인 코딩좀 알려주세요. -_-; -
정내
2008.07.05 21:56
좋은정보 감솨^^*
비교 하기 전에 loop at it_data를 돌리셔야죠~