FORM SELECT_RTN1.
EXEC SQL PERFORMING APPEND_RTN.
SELECT /*+ ORDERED USE_NL(T00 T01 T02 T03 T04 T05 T06 T07
T08 T09 T10 T11 T12 T13 T14 T15
T16 T17 T18 T19 T20 ) */
T00.REGIOGROUP, T00.HAUS, T01.VSTELLE, T01.VBSART,
T01.FLOOR, T02.ANLAGE, T02.ANLART, T03.ABLEINH, T06.PARTNER,
DECODE(T06.TYPE,'1',T06.NAME_LAST,'2',
T06.NAME_ORG1,'3',T06.NAME_ORG1),
T08.CITY1 || ' ' || T08.STREET || ' ' ||
T08.HOUSE_NUM1 || ' ' || T01.HAUS_NUM2,
T11.BGLJAHR,
DECODE(T11.BGLART,'01','신품','02','검정품') ,
T12.SERNR, T12.BAUJJ,
T12.BAUMM, T12.HERST, T12.MATNR,
TO_NUMBER(NVL(RTRIM(RTRIM(RTRIM(RTRIM(T14.BAUKLTXT,'M'),
'T'),'R'),'Corrector'),0)),
NVL(T17.NOTE,' '), T20.TARIFART, T15.FUNKTXT,T18.MESSDRCK ,
T22.LBTXT,
DECODE(T19.PR_AREA_AI,'0001','보정계수적용',
'0002','보정계수미적용'),
T02.ERDAT, T02.ERNAM,
T08.STR_SUPPL3, T08.LOCATION
INTO :G_ITAB-REGIOGROUP, :G_ITAB-HAUS, :G_ITAB-VSTELLE,
:G_ITAB-VBSART, :G_ITAB-FLOOR, :G_ITAB-ANLAGE,
:G_ITAB-ANLART, :G_ITAB-ABLEINH, :G_ITAB-PARTNER,
:G_ITAB-NAME_ORG1, :G_ITAB-ADDR, :G_ITAB-BGLJAHR,
:G_ITAB-BGLART_T, :G_ITAB-SERNR, :G_ITAB-BAUJJ,
:G_ITAB-BAUMM, :G_ITAB-HERST, :G_ITAB-MATNR,
:G_ITAB-BAUKLTXT, :G_ITAB-NOTE, :G_ITAB-TARIFART,
:G_ITAB-FUNKTXT, :G_ITAB-MESSDRCK, :G_ITAB-LBTXT,
:G_ITAB-PR_AREA_AI_T, :G_ITAB-ERDAT, :G_ITAB-ERNAM,
:G_ITAB-STR_SUPPL3, :G_ITAB-LOCATION
FROM EHAUISU T00, EVBS T01, EANL T02, EANLH T03, EVER T04,
FKKVKP T05, BUT000 T06, ILOA T07, ADRC T08,
EASTL T09, EGERH T10, EGERS T11, EQUI T12, ETYP T13,
TE237T T14, TE055T T15, IFLOT T16, ENOTE T17,
EZUZ T18, ETDZ T19, EASTS T20,
MARA T21, T024X T22
WHERE T00.MANDT = :SY-MANDT
AND T00.REGIOGROUP BETWEEN :P_REGIO-LOW AND :P_REGIO-HIGH
AND T00.MANDT = T01.MANDT
AND T00.HAUS = T01.HAUS
AND T01.MANDT = T02.MANDT
AND T01.VSTELLE = T02.VSTELLE
AND T02.ERDAT BETWEEN :P_ERDAT-LOW AND :P_ERDAT-HIGH
AND T02.MANDT = T03.MANDT
AND T02.ANLAGE = T03.ANLAGE
AND T03.BIS = '99991231'
AND T02.MANDT = T04.MANDT(+)
AND T02.ANLAGE = T04.ANLAGE(+)
AND T04.AUSZDAT(+) = '99991231'
AND T04.MANDT = T05.MANDT(+)
AND T04.VKONTO = T05.VKONT(+)
AND T05.MANDT = T06.CLIENT(+)
AND T05.GPART = T06.PARTNER(+)
AND T00.MANDT = T07.MANDT
AND T00.HAUS = T07.TPLNR
AND T07.OWNER = '2'
AND T07.MANDT = T08.CLIENT
AND T07.ADRNR = T08.ADDRNUMBER
AND T02.MANDT = T09.MANDT
AND T02.ANLAGE = T09.ANLAGE
AND T09.BIS = '99991231'
AND T09.MANDT = T10.MANDT
AND T09.LOGIKNR = T10.LOGIKNR
AND T10.BIS = '99991231'
AND T10.MANDT = T11.MANDT
AND T10.EQUNR = T11.EQUNR
AND T11.MANDT = T12.MANDT
AND T11.EQUNR = T12.EQUNR
AND T12.MANDT = T13.MANDT
AND T12.MATNR = T13.MATNR
AND T13.MANDT = T14.MANDT
AND T13.BAUKLAS = T14.BAUKLAS
AND T14.SPRAS = '3'
AND T13.MANDT = T15.MANDT
AND T13.FUNKLAS = T15.FUNKLAS
AND T15.SPRAS = '3'
AND T10.MANDT = T16.MANDT
AND T10.DEVLOC = T16.TPLNR
AND T16.MANDT = T17.MANDT(+)
AND ' ' = T17.SPRAS(+)
AND T16.TPLNR = T17.OBJKEY(+)
AND '3' = T17.OBJTYPE(+)
AND '1' = T17.LFDNR(+)
AND T09.MANDT = T18.MANDT
AND T09.LOGIKNR = T18.LOGIKNR2
AND T18.BIS = '99991231'
AND T18.ZUART = '03'
AND T18.MANDT = T19.MANDT
AND T18.LOGIKZW = T19.LOGIKZW
AND T19.BIS = '99991231'
AND T19.MANDT = T20.MANDT
AND T19.LOGIKZW = T20.LOGIKZW
AND T20.BIS = '99991231'
AND T13.MANDT = T21.MANDT
AND T13.MATNR = T21.MATNR
AND T21.MANDT = T22.MANDT(+)
AND T21.LABOR = T22.LABOR(+)
AND '3' = T22.SPRAS(+)
ENDEXEC.
ENDFORM.
처음 보는건데여;;
어떤 의미인지 상세한 설명 부탁 드립니다~~
댓글 3
-
activeman
2008.12.03 21:40
-
아밥퍼
2008.12.03 22:10
자료를 한건씩 가져와서 APPEND_RTN 이란 form 문을 통해
인터널테이블 G_ITAB 에 추가를 합니다.
native sql 사용형식은
아래와 같이 사용을 합니다.
EXEC SQL .
SQL 문
ENDEXEC.
-
웅2
2008.12.06 02:56
음 대략 보아하니 빨간색으로 표시하신 부분에 대한 설명만 하면 대충 설명이 되겠네요. 표시 잘 하셨네요. ^^
EXEC SQL PERFORMING APPEND_RTN.
==> Native SQL은 쿼리의 결과값을 한줄 한줄 불러오는 select, endselect 블럭과 같습니다.
여기에서 performing에 구현된 append_rtn은.. 결과값을 한줄 불러올때마다 한번 호출되어 실행되게 됩니다.
SELECT /*+ ORDERED USE_NL(T00 T01 T02 T03 T04 T05 T06 T07
==> 여기에서 /*+ ... */ 이 블럭 부분은 Oracle의 Hint라는 것으로 SQL 실행속도 개선을 위해 사용하는 거라 말씀드릴 수 있습니다.
DECODE(T06.TYPE,'1',T06.NAME_LAST,'2',
T06.NAME_ORG1,'3',T06.NAME_ORG1),
==> DECODE문은.. (FIELD, A,B,C) 이런 모양인데 FIELD가 A일때 B로 출력하고, 아니면 C로 출력하라는 조건문과 유사합니다.
여기서 재미있는건 DECODE(FIELD, A, B, A1, B1, A2, B2, C) 이런 식으로 A일때 B, A1일때 B1 식의 if, else if 형식으로도 사용 가능합니다.
DECODE(T11.BGLART,'01','신품','02','검정품') ,
==> 위와 동일하겠죠. BGLART가 '01'이면 '신품'으로 '02'이면 '검정품'으로 출력하라는 뜻입니다.
TO_NUMBER(NVL(RTRIM(RTRIM(RTRIM(RTRIM(T14.BAUKLTXT,'M'),
'T'),'R'),'Corrector'),0)),
==> 요놈은 Numeric Type으로 Type Casting 하는 부분입니다. 저기 보이는 NVL이라는 함수는, 결과값이 NULL일때 0으로 표현하라는 함수이구요, RTrim은 뭐 아시겠고..
FROM EHAUISU T00, EVBS T01, EANL T02, EANLH T03, EVER T04,
==> 얘는.. T00이 EHAUISU 테이블의 ALIAS겠죠.. 아실것 같은데 빨간색으로 표시되어 있어 덧붙입니다.
도움이 되실지 모르지만.. 간략히 적어봤습니다.
native sql 구문이군요.. 오라클db에 관해서 공부를 하시는게 빠를 듯 합니다.(사용한db가 오라클 이네요.)
오라클 sql문에 대해서 먼저 공부를 하십시요...필요하시다면 오라클 sql에 대한 자료를 공유해 드릴 수 있습니다.
즐밥하세요..