안녕하세요..이제 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.
틀린부분이 있으면 지적 부탁드리겠습니다.
댓글 6
-
SAP폐인
2008.11.06 05:49
-
아밥퍼
2008.11.06 17:16
테이블 alias 사용을 잘못 하셨네요.
SELECT LIPS~VBELN, LIPS~POSNR ............
--> SELECT LIPS.VBELN, LIPS.POSNR
'~' 을 '.' 로 바꾸셔야 합니다.
-
첫느낌처럼
2008.11.06 18:10
답변 주셔서 감사힙니다.
SAP Table이 맞습니다...
아밥퍼님께서 말씀하신데로 "~"대신 "."으로 하여도 같은 오류가 나타납니다...
-
SAP폐인
2008.11.06 18:57
혹시 Native SQL을 사용하신 이유가 무엇인지? native sql 규칙에 안맞아서 ....덤프나는거 같은데..
그리고 Outer Join을 사용한 이유를 알 수 있을까요? .. 테이블명에 /가 들어가는걸 보니 BW쪽 같은데..
Native SQL이 아니면 ... 이렇게 하면 안될까욥?....
SELECT A~VBELN A~POSNR A~MATNR A~LGORT A~WERKS
A~KDMAT A~LFIMG A~VGBEL A~VGPOS A~EMPST
A~ERNAM B~MBLNR C~BUDAT C~TCODE2
INTO CORRESPONDING FIELDS OF TABLE ITAB
FROM LIPS AS A OUTER JOIN /BTC01/TDT017 AS B
ON A~VBELN EQ B~VBELN
AND A~MANDT EQ B~MANDT
INNER JOIN MKPF AS C
ON B~MBLNR EQ C~MBLNR
AND B~POSNR EQ C~POSNR
AND B~MANDT EQ C~MANDT
WHERE A~VBELN IN S_DBELN
AND A~MANDT EQ SY-MANDT
AND B~STAT EQ 'P'
AND C~BUDAT IN S_BUDAT. -
w
2008.11.06 19:12
decode를 쓰는것도 아니고, 단순한 join 인것 같은데 native보단 open sql을 쓰는것이 권고입니다.되도록이면 native쓰지마셔요.trace도 안되고 로그도 안남으니 꼭 필요한 경우 아니면 open을 쓰셔요.
-
첫느낌처럼
2008.11.06 23:33
먼저 답변주신 고수님들께 감사드립니다.
SAP폐인님이 질문하신거에 대해 답변 드리겠습니다.
제가 하고자 하는것은 A라는 Table에는 해당 문서의 번호가 있습니다.
그리고 B에는 해당문서의 번호와 거기에 존재하는 전표번호가 있습니다.
그리고 C에는 해당 전표번호와 전표 일자가 있습니다.
그래서 다시 정리해서 말씀을 드리면
A : LIPS, B : /BTC01/TDT017, C : MKPF
==========================================
Table 문서번호 전표번호 처리일자
------------------------------------------
A 001
B 001 100
C 100 2008.11.06
==========================================
이런 구조로 되어 있습니다.
A를 기준으로 B와 C를 조인하여 존재하는 값들을 A값 오른쪽에 나타나게 할려고 했습니다.
A에는 있으나 B와 C를 Join하여 없는 값들은 그냥 값들은 나오고 오른쪽에는 공백으로 나타나게 할려고 합니다.
충분한 설명이 되었는지 모르겠습니다.^^
음 Native SQL은 잘 몰라서 pass -_-ㅋ 근데 그냥 SQL로 짜면 안되는 건가요?
LIPS, MKPF나.. /BTC01/TDT017은 SAP Table 같은데..