안녕하세요.
SELECT 문의 옵션인 FOR ALL ENTRIES 의 사용법에 대해 문의 드립니다.
0. 상황
T_MESSAGE <- 트랜잭션 처리 결과 메시지가 들어 있는 내부 테이블
T100 <- 텍스트 테이블
1. 하고 싶은것
트랜잭션을 실행 시켜 (BATCH INPUT)
처리 결과를 내부 테이블 T_MESSAGE 로 받아와
T_MESSAGE 의 각 메세지 KEY 를 이용해
T100 로 부터 메시지 TEXT 를 취득함.
단,
T100 로 부터 메시지 TEXT를 취득 할때
TEXT 안의 &1 &2 &3 을
각 문제가 되었던 VALUE 로 REPLACE 해 줌.
VALUE 는 T_MESSAGE 에 있음.
*. 결론 : DB테이블 T100 의 텍스트와
내부 테이블 T_MESSAGE 의 값을 결합해
최종 ERROR MESSAGE 테이블을 작성
2. 장애물.
가장 쉬운 방법은
LOOP AT T_MESSAGE
SELECT SINGLE TEXT FROM T100
WHERE 각 키..
..
REPLACE & -> T_MESSAGE-값
ENDLOOP.
이지만,
현 프로젝트 정책상(코딩 규칙)
LOOP 안에 SELECT 를 쓰는 것을 금지하고 있습니다.
3. 접근과 한계.
그래서 처음 생각한 것은
SELECT TEXT
FROM T100
FOR ALL ENTRIES T_MESSAGE
INTO TABLE T_새로운전용테이블
.
한뒤
LOOP T_새로운전용테이블
READ TABLE T_MESSAGE 각 KEY 설정, 한줄만 취득
REPLACE T_새로운전용테이블 의 & -> T_MESSAGE 의VALUE
LOOPEND.
위와 같이 변경하려 했으나,
READ TABLE 할때 필요한 KEY 수가 총 5개로
이것 역시 간단 하지만은 않더군요. (위의 SELECT 문으로 취득 할 수 없는 T_MESSAGE 의 키 항목이 있음)
--------------
FOR ALL ENTRIES 조건으로 어느 DB 테이블을 검색 할때,
조건으로 사용하는 내부 테이블의 내용은 정녕 취득이 불가능 한 것인가요?
트랜잭션을 실행시켜 메시지를 받아 온뒤 & 를 해당 값으로 변경 시켜주는 작업은
여기저기서 빈번히 발생 하고 있을 것 같은데요,
이럴 경우 어떤 해결책을 쓰고 계신지
가르침을 부탁 드립니다.
* e-abap님에 의해서 게시물 복사되었습니다 (2010-01-09 13:43)
* e-abap님에 의해서 게시물 이동되었습니다 (2010-01-09 13:56)
댓글 2
-
데이
2010.01.08 03:39
-
JiruMi
2010.01.08 03:48
일단, 답변 너무 감사드립니다!
1) where 문은 당연히 있습니다.
2) read table 할 때, 메시지클래스와 번호 키 만으로는 못 가져오더군요.. <- (?)
3) 이런게 있었군요! (내부적으로는 select single 이 들어있지만 Function 내부 까지 엄격 하지는 않고, 실제로 접근 데이터량도 최대 5건 미만 밖에 안되니 Function 을 써서 하면 큰 지적이 없을 듯 합니다. )
큰 도움이 되었습니다.
1) for all entries in 사용하실때 t_message 필드랑 맞는 필드에 대하여 조건을 주시면 됩니다
where 조건이 없다면 for all entries in 을 쓰는 의미가 없습니다 테이블 전체를 읽는 거거든요.
where 뒤에 언어키랑 메시지 클래스 메시지 번호 등등을 넣어주시면 되구요
2) read table 할때도 메시지 클래스랑 번호만 키값으로 주면 될거구요
msgv1 부터 msgv4 까지 4개가 &에 들어갈 수 있으므로
find 나 search 를 이용해서 & 값을 replace 해주면 될것 같네요
3) 제 경우에는 message_text_build 펑션을 사용합니다
&값 신경쓸것 없이 알아서 다 처리해 주거든요