간단한 소스인데...
1.출력된 줄마다 번호(1,2~~~)를 출력하겠끔 할려고 하는데 런타임에러가 뜨네요.
뭐가 잘못 작성이 된는지 알려주세요.
2.그리고 번호를 1,2~~~~이런식으로 할려고 하는데 sy-index는 아닌것 같다는 생각이 드는데
아니라 어떤것으로 사용해야 하나요?
3.하나만 더 질문을 하면
CLIENT SPECIFIED는 책설명에는 타 클라이언트의 데이터를 가져온다고 하는데
무슨 말인지 이해가 않가네요.
tables: scarr.
DATA wa TYPE TABLE OF scarr.
DATA name(10) TYPE c VALUE 'SCARR'.
DATA: BEGIN OF itab OCCURS 0,
carrid LIKE scarr-carrid,
carrname LIKE scarr-carrname,
END OF itab.
SELECT *
INTO itab
FROM (name) CLIENT SPECIFIED
WHERE mandt = '000'.
LOOP AT wa INTO itab.
write: / sy-index, itab-carrid, itab-carrname.
ENDLOOP.
ENDSELECT.
댓글 7
-
SAP폐인
2009.01.04 22:30
-
앙리
2009.01.05 06:42
1. 000값은 있습니다. 디버깅을 걸고 실행한후 디버깅화면에서 f5를 눌러면 런타임에러가 떠서 확인이 않됩니다.
아래는 런타임 일부 내용입니다. 뭐가 문제인지 알려주세요.
Runtime Errors SAPSQL_SELECT_WA_TOO_SMALL
Short text
With an Open SQL select, the output area is too small.
What happened?
Error in the ABAP Application Program
The current ABAP program "ZTEST4" had to be terminated because it has
come across a statement that unfortunately cannot be executed.
Error analysis
In an Open SQL select, the output area used to hold the selected
records must be at least as wide as the database table from which
records are being read.
In this particular case, the database table is 286 bytes wide,
but the output area is only 23 bytes wide.
-
activeman
2009.01.05 07:22
1. 에러가 나는 이유는 itab에 두개의 필드만 있는데 전체를(*) 넣으려고 하니까 에러가 납니다.
아래와 같이 수정하시면 에러가 안날겁니다.
SELECT carrid carrname
INTO itab
FROM (name) CLIENT SPECIFIED
WHERE mandt = '000'.
2.sy-index ==> sy-tabix.
3. CLIENT SPECIFIED ==> 특정 client의 자료를 불러 올수가 있습니다.
즐밥하세요.
-
앙리
2009.01.05 08:04
에러는 안나는데 실행이 않됩니다. ㅡ.ㅡ
이상없는것 같은데... 기초인데 이것 같고 헤메네요.
TABLES: scarr.
DATA wa TYPE TABLE OF scarr.
DATA name(10) TYPE c VALUE 'SCARR'.
DATA: BEGIN OF itab OCCURS 0,
carrid LIKE scarr-carrid,
carrname LIKE scarr-carrname,
END OF itab.
SELECT carrid carrname
INTO itab
FROM (name) CLIENT SPECIFIED
WHERE mandt = '000'.
LOOP AT wa INTO itab.
WRITE: / itab-carrid, itab-carrname.
ENDLOOP.
ENDSELECT. -
아밥퍼
2009.01.05 17:24
select ~ endselect 사용할때 내부에서 loop 을
사용할 필요가 없죠.
SELECT carrid carrname
INTO itab
FROM (name) CLIENT SPECIFIED
WHERE mandt = '000'.
WRITE: / itab-carrid, itab-carrname.
ENDSELECT.
-
테리
2009.01.05 17:48
SELECT
ENDSELECT
구문수행시 내부에서는 자체적으로 Data가 존재할 때 까지 Loop를 수행합니다.
-
김지성
2009.01.07 00:58
아밥퍼님과 테리님 답변대로
Select ~ endSelect시 필드는 Single로 해야 합니다
즉.
Select Single filed1 field2..
...
endSelect
간단한 건 디버깅 해보시면서 깨우치는게 제일 머릿속에 와닿습니다.
1. Client 000이 존재하는지, 해당 Client에 데이터가 존재하는지 살펴보세요.
2. Sy-tabix ( table count )
3. 여러개의 client가 있는 경우, 현재 사용중인 client외 다른 client의 데이터가 필요할 때 쓸 수 있습니다.