>안녕하세요..이제 SAP ABAP을 시작하게된 초보자입니다.
>아래와 같이 SQL문을 작성하였는데 자꾸 Dump Error가 발생합니다.
>
>Left Outer Join에 SubQuery를 작성하였는데
>이렇게 작성하면 안되는 건지요? DB를 MS-SQL2005을 사용하고 있습니다.
> EXEC SQL.
SELECT LIPS.VBELN, LIPS.POSNR, LIPS.MATNR, LIPS.LGORT, LIPS.WERKS,
LIPS.KDMAT, LIPS.LFIMG, LIPS.VGBEL, LIPS.VGPOS, LIPS.EMPST,
LIPS.ERNAM, A.MBLNR, A.BUDAT, A.TCODE2
INTO :ITAB-VBELN, :ITAB-POSNR, :ITAB-MATNR, :ITAB-LGORT,
:ITAB-WERKS, :ITAB-KDMAT, :ITAB-LFIMG, :ITAB-VGBEL,
:ITAB-VGPOS, :ITAB-EMPST, :ITAB-ERNAM, :ITAB-MBLNR,
:ITAB-BUDAT, :ITAB-TCODE2
FROM LIPS
LEFT OUTER JOIN ( SELECT B.VBELN,
B.POSNR,
B.MBLNR,
B.STAT,
MKPF.BUDAT,
MKPF.TCODE2
FROM /BTC01/TDT017 AS B JOIN MKPF
ON B.MBLNR = MKPF.MBLNR
AND B.MANDT = :SY-MANDT
AND B.VBELN IN :S_DBELN
AND B.STAT = 'P'
AND MKPF.BUDAT IN S_BUDAT ) AS A
ON ( LIPS.VBELN = A.VBELN )
AND ( LIPS.POSNR = A.POSNR )
AND ( LIPS.MANDT = :SY-MANDT )
WHERE LIPS.VBELN IN :S_DBELN
AND LIPS.MANDT = :SY-MANDT
ENDEXEC.
>
>틀린부분이 있으면 지적 부탁드리겠습니다.
native sql 에러는
FROM LIPS AS A OUTER JOIN /BTC01/TDT017 AS B
<-- 여기서 /BTC01/TDT017 에 '/' 가 들어가 있어서
MS SQL 에서 테이블 인식이 되는지 모르겠지만
이런 경우는 쌍따옴표로 테이블을 감싸야 합니다. --> "/BTC01/TDT017" AS B
그리고 값을 넣는 부분에
WHERE LIPS.VBELN IN :S_DBELN
AND LIPS.MANDT = :SY-MANDT
콜론을 사용하는데 오라클은 인식을 하는데
MS SQL 도 인식을 하는지 모르겠네요.
그리고 WHERE 절에 IN 부분도 에러가 있네요.
*** WHERE LIPS.VBELN IN :S_DBELN ==> IN ( 'A', 'B', 'C') 이런식으로 바꾸셔야 합니다.
OPEN SQL 처럼 LIPS.VBELN IN :S_DBELN 이런식의 IN :S_DBELN 은 사용할 수 없습니다.
결론은 LEFT OUTER JOIN 때문에 NATIVE SQL로 한번에 해결하실려고 그런 것 같은데
OPEN SQL을 사용하는 방법으로 하시는게 좋을 것 같네요.
먼저 A : LIPS, B : /BTC01/TDT017, 두 테이블을 조인을 걸어서
데이터를 가져오고 가져오는 내부로직에 C 를 가져오는 방법으로
하시는 것도 하나의 방법입니다.
예를 들면
SELECT A내용, B 내용
FROM A LEFT OUTER JOIN B
IF B.전표번호 NE SPACE.
SELECT C내용
FROM C
INTO TABLE ITAB2
WHERE 전표번호 = B.전표번호
MOVE CORRESPONDING ITAB2 TO 결과ITAB
ENDIF.
APPEND 결과 ITAB.
ENDSELECT.
도움이 되시길...
상세한 정보와 도움을 주셔서 감사합니다...
오늘 하루도 즐거운 하루 되십시오...