ABAP초보자 입니다.. 아직 교육을 받고 있는터라.. 모르는게 투성이네요;;
궁금한게 있어서 한자 적어 봅니다.
고수님들 많이 많이 알려주세요~~
SELECT SINGLE carrid carrname url FROM scarr
INTO CORRESPONDING FIELDS OF gs_scarr.
위에 처럼 select를 할때
INTO CORRESPONDING FIELDS OF table name
INTO Table table name.
INTO Table name
위에 차이점이 몬가요??
아무리 실습을 해봐도 잘 모르겠어요...
대략적으로 Corresponding은 table name의 field와 일치를 시킨다고만 알고 있거든요.
아래는 전체 소스..
=========================================================================
DATA: itab_flight TYPE flighttab,
wa_flight TYPE LINE OF flighttab.
DATA: gs_scarr TYPE scarr,
gt_scarr TYPE scarr.
SELECT SINGLE carrid carrname url FROM scarr
INTO CORRESPONDING FIELDS OF gs_scarr.
===============================================
*바로 아래에 루프를 돌리고 싶은데.. 안되더라고요.
WRITE: / 'TEST FOR S116'.
WRITE: / 'Carrid : ', gs_scarr-carrid.
================================================
*바로 아래의 루프는 제대로 돌아가고요....
SELECT * FROM sflight
INTO TABLE itab_flight
WHERE carrid BETWEEN 'AA' AND 'LH'.
WRITE: / '====================================================================================='.
WRITE: / 'gs_sflight - AA'.
SKIP.
LOOP AT itab_flight INTO wa_flight
WHERE carrid = 'AA'.
WRITE: / wa_flight-carrid,
wa_flight-connid,
wa_flight-fldate,
wa_flight-seatsmax,
wa_flight-seatsocc,
wa_flight-price,
wa_flight-paymentsum.
ENDLOOP.
* e-abap님에 의해서 게시물 복사되었습니다 (2010-01-09 13:44)
* e-abap님에 의해서 게시물 이동되었습니다 (2010-01-09 13:55)
댓글 4
-
JG
2009.12.30 01:44
-
요요
2009.12.30 02:23
into 와 into table 의 차이를 여쭤보시는 것 같은데요.
single 데이터를 읽을 것이냐 multi 데이터를 읽느냐의 차이입니다.
sinlgle 데이터는 work area(구조형태)로 데이터를 받구요
multi 데이터는 internal table 형태로 데이터를 받습니다.
여기에 corresponding fields of 가 붙는데 이것은 이해하신것과 같이
필드이름이 같은 것을 매칭시켜서 데이터를 가져오라는 뜻이구요.
없다면 index(순서대로)로 데이터를 연결시킵니다.
예를 들면
SELECT * FROM sflight
INTO TABLE itab_flight
WHERE carrid BETWEEN 'AA' AND 'LH'.
은 sflight 의 모든 필드를 선택하는데 itab_flight 의 필드에 순서대로 매핑하여 데이터를 가져오고
SELECT * FROM sflight
INTO CORRESPONDING FIELDS OF TABLE itab_flight
WHERE carrid BETWEEN 'AA' AND 'LH'.
은 sflight 와 itab_flight 의 필드 이름이 같은것끼리 매핑하여 데이터를 가져오라는 뜻입니다.
위 선언은 itab_flight 의 구조가 sflight 와 동일한 구조라서 같은 결과를 가져오게 되지만
itab_flight와 sflight 가 다른 구조이거나 sflight 중 일부만으로 구성된 구조라면
결과는 달라질 거예요. itab_flight의 구조를 변경하여 테스트해보시면 금방 아실 거예요.
SELECT * FROM sflight
INTO TABLE itab_flight
WHERE carrid BETWEEN 'AA' AND 'LH'.
같은 경우는 조건에 해당하는 데이터를 모두(multi) 읽어오고
SELECT * FROM sflight
INTO itab_flight
WHERE carrid BETWEEN 'AA' AND 'LH'.
ENDSELECT.
또는
SELECT SINGLE * FROM sflight
INTO itab_flight
WHERE carrid BETWEEN 'AA' AND 'LH'.
은 조건에 해당하는 데이터중에서 1건의 데이터만 읽어오게 됩니다.
이해가 되셨길 바랍니다. ^^
-
요요
2009.12.30 02:28
위 프로그램을 INTO 구문으로 바꿔보면 다음과 같을 거예요.
WRITE: / '====================================================================================='.
WRITE: / 'gs_sflight - AA'.
SKIP.
SELECT * FROM sflight
INTO wa_flight
WHERE carrid = 'AA'.
WRITE: / wa_flight-carrid,
wa_flight-connid,
wa_flight-fldate,
wa_flight-seatsmax,
wa_flight-seatsocc,
wa_flight-price,
wa_flight-paymentsum.
ENDSELECT. -
나마야
2009.12.30 18:05
into table, into table, corresponding 의 차이는 위에서 잘 설명해 주셨네요.
하나 덧붙이자면, select single을 사용하실때는 조건에 맞는 data 한건만 읽어와요.
그래서 조건에 맞는 data가 100건이 있어도 single로 찾았다면 1건만 internal table에 들어오게 됩니다
single은 보통 master성 data를 읽을 때 사용하죠~
into table = into corresponding fields of table의 기능은 같습니다. 다만, into table은 순서대로 인터널테이블에 값이 들어갑니다 (begin으로 인터널테이블을 만들어 쓰셨다면 필드매치를 확인하셔야 되겠죠). 아시듯이 corresponding은 필드명이 같은 곳에 값이 들어가게 되죠.
밑에 루프는 인터널테이블에 담으셨기에 가능합니다.
위에 루프가 안된다는 건은 into corresponding fields of work_area로 담아지기에 루프가 안됩니다.
루프를 돌리고 싶으시면 select single이 아닌 select ~ endselect로 돌리시면 됩니다. 아님, 테이블에 담으셔도 되구요.