이번에도 간단한건데 왜그런지 모르겠어요
루프 돌려봤는데
첫번째 줄 데이터를 헤더에 가져오는데 두번째 세번째에도 계속 첫번째 데이터만 가져와요
이론상 셀렉트 구문이 잘못된거 같지 않은데 잘 모르겠네요
참고로 인터널 테이블에도 내용이 매우 잘들어가고 셀렉트만 제대로 안되는겁니다
도와주세요 ㅠㅠ
LOOP at it_itab.
SELECT single STOCK
FROM Z002_PROD2 as a
INNER JOIN z002_matt2 as b
on a~matnr eq b~matnr
INTO IT_ITAB-STOCK
WHERE A~MATNR EQ B~MATNR.
MODIFY IT_ITAB.
endloop.
댓글 15
-
버미!
2010.09.18 00:56
헉..저런 Select 구문 처음본다.. -
버미!
2010.09.18 00:57
이게 아닐까...
LOOP at it_itab.
SELECT single STOCK
FROM Z002_PROD2 as a
INNER JOIN z002_matt2 as b
on a~matnr eq b~matnr
INTO IT_ITAB-STOCK
WHERE A~MATNR EQ it_itab-MATNR.
MODIFY IT_ITAB. -
오렌지겅주님
2010.09.18 01:20
이게 it_itab의 내용을 불러오는게 아니구 일단 인터널 테이블 빈거를 가져온다음에 재고수량에 빈칸 채워넣고 저장하는거입니다 ㅎ
글고 이미 저장되있는 수량은 불러오는거구요 ㅠㅠㅠ
어케 해야되나요?
-
deepbluesea
2010.09.18 01:35
빈인터널 테이블은 루프가 돌지 않는데..............
질문의 요지가 정확히 뭔지...................
-
qwert
2010.09.18 01:44
질문의 요지를 보니 위 재고수량은 0인 상태에서 internal table을 돌려서 테이블의 재고수량을 넣어주려는 것 같은데 저렇게 하시면 당연히 똑같은 데이터만 반복되어 들어가겠죠.. 즉 internal table의 내용과는 상관없이 6번을 single select하여 맨처음 데이터를 열심히 반복적으로 가져와서 박아주겠죠 ㅎㅎ 위 버미님의 조건식 WHERE조건으로 바꿔줘야 할 듯합니다.
-
오렌지겅주님
2010.09.18 02:09
qwert님 좀만 구체적으로 말씀해 주세요
qwert님이 말씀하신대로 하려고 하는데
셀렉트 싱글을 왜 6번 해줘야 하고 6번은 어케 하져? loop at을 6번 쓰면 되는건가요? 그건 아닌거 같은데...
-
오렌지겅주님
2010.09.18 02:11
아 빈인터널 테이블이 루프가 돌지 않는구나..
그건알겠고 !
제꺼는 데이터가 있을 수도 있고 없을수도 있는데 있을경우 데이터를 불러오고 없을경우에는 그냥 빈칸만 불러오게 만들고 싶은 것입니다
그리고 다 만든 후에 빈칸만 불러온 칸에는 값을 집어넣은담에 저장 버튼 누르면 저장되게 만들고 있구요.
이해 가시나요??
-
qwert
2010.09.18 02:43
SELECT SINGLE을 6번 하라는 말이 아니고, 지금 작성하신 구문으로 미루어 볼때 LOOP ~ ENDLOOP. 사이에 기술한 SELECT SINGLE구문은 테이블 ACCESS와 internal table 수정에는 아무런 영향을 끼치지 않는다는 뜻으로 드린 말씀이에요. 즉, WHERE A~MATNR EQ B~MATNR. <--- 이 부분이 아무런 의미가 없는 조건절이라는 거죠. INTERNAL TABLE에 있는 material의 조건으로 테이블에서 값을 검색하려던 것 아니었나요? 따라서 버미님의 WHERE A~MATNR EQ it_itab-MATNR.로 바꾸어 줘야 한다는 겁니다.
-
아밥 잭
2010.09.18 03:05
오렌지겅주님! it_itab에 데이터를 넣어주나요? 내가 보기에는 넣어줄것 같은데요.
그리고 it_itab에 어느필드가 있습니까? 혹시, stock만 있나요?
만일, it_itab에 matnr를 넣어주고, 그 안에 있는 matnr를 사용한다면 위에 다른분이 말씀하신게 맞고요.
그렇치 않고 it_itab에 데이터를 넣어주는 부분이 없다면 loop는 돌리필요가 없고요.
select single대신에 아래처럼 인터널테이블에 넣어주세요.
SELECT a~matnr a~STOCK
FROM Z002_PROD2 as a
INNER JOIN z002_matt2 as b
on a~matnr eq b~matnr
INTO corresponding fields of table IT_ITAB
WHERE A~MATNR EQ B~MATNR. -
오렌지겅주님
2010.09.18 03:36
그러니깐 일단 it_itab은
DATA : BEGIN OF IT_ITAB OCCURS 0,
MATNR LIKE Z002_MATT2-MATNR,
MAKTX LIKE Z002_MATT2-MAKTX,
STOCK LIKE Z002_PROD2-STOCK,
ERNAM LIKE Z002_MATT2-ERNAM,
ERDAT LIKE Z002_MATT2-ERDAT,
ERTIM LIKE Z002_MATT2-ERTIM,
END OF IT_ITAB.
요렇게 선언되어 있구요 ~
테이블은 z002_prod2 테이블을 사용해요 !
그리고 stock 값을 입력 받아서 테이블에 저장할껀데요 !
일단 맨처음에는 stock에 값이 없잖아요 ! 그리고 나서 처음에는 입력을 받아서 넣어줄껀데 문제점이
1. qwert님 말대로 where절을 인식을 잘 못해서 값을 다 불러온다는거
아... 하다가 쫌 이해가 되는듯 싶은데 그럼 일단 위의 문제좀 어케 해결해야 하는지좀 알려주세요 ㅜㅜㅠ
-
crazybarthez
2010.09.20 18:22
아.... 출력된 데이터를 Stock(재고수량)만 입력 받아서 저장을 하시겠단 소리 같은데요.....
LOOP at it_itab.
SELECT single STOCK
FROM Z002_PROD2 as a
INNER JOIN z002_matt2 as b
on a~matnr eq b~matnr
INTO IT_ITAB-STOCK
WHERE A~MATNR EQ B~MATNR.
MODIFY IT_ITAB.
endloop.
위 문장은 Loop 돌리는 it_itab과는 전혀 상관없이 z002_matt2 테이블과 Z002_PROD2 의 이너조인 한 데이터 중에서
z002_matt2 테이블안에 있는 MATNR값으로만 가져오겠단 소리고요.
바꾸자면 버미! 님과 qwert님의 말씀대로
LOOP at it_itab.
SELECT single STOCK
FROM Z002_PROD2 as a
INNER JOIN z002_matt2 as b
on a~matnr eq b~matnr
INTO IT_ITAB-STOCK
WHERE A~MATNR EQ it_itab-MATNR.
MODIFY IT_ITAB.
endloop.
로 바꿔주면 Loop 돌리는 it_itab안의 MATNR의 값으로 inner join의 데이터를 가져오겠단 겁니다. ㅡㅡㅋ
-
오렌지겅주님
2010.09.20 20:49
그래서 제가 원하는 대로 하려면 어케해야 하는거죠???ㅠㅠ
-
crazybarthez
2010.09.28 01:34
그러니까요.....ㅡㅡㅋ
출력전에 dbtab에 있는 데이터를 가지고 올거잖아요???
그 데이터를 itab에 집어넣어서 출력을 할거잖아요.
그러니까 dbtab에 있는 데이터를 불러오는 Select문(쿼리)는 아래와 같은 형식이 될것 같구요,
select *
into corresponding fields of table itab
from z002_prod2.
Stock 값을 입력하고 저장하는건
itab에 입력한 Stock 값이 있다는 가정하에
Modify z002_prod2 from table itab
같은 형식이 되는거죠....
조금 더 설명드리면.....
Stock값이 처음에 없다면 출력할 데이터를 담고있는 itab에도 값이 없을것이고.
이를 출력할 때는 각 필드의 type에 따라서 값이 없다던지 0.00 등등의 형식으로 표현될거구요.
위에 써 놓으셨던 itab을 looping해서 select하는 그 구문은 필요가 없는게 맞는것 같습니다.
간단하게 순서를 적으면 Data를 Get (Select등으로 출력할 itab에 데이터 집어넣는 작업) -> 출력 -> Stock 입력 ->
itab에서 입력한 stock값 인식 -> 입력된 stock값을 포함하는 itab의 데이터를 기준으로 dbtab의 modify.
이렇게 되겠네요.
-
오렌지겅주님
2010.09.28 18:29
ㅎㅎㅎ 문제 해결 했습니다 ! 모두 감사합니당 !!>< -
rudtnfkrn
2010.09.29 19:14
SELECT single STOCK
위 구문에서 single 때문에 그런듯 싶습니다.
single을 제거하시면 될듯 하네요