*" SAP 표준 쿼리.... RM07DOCS
SELECT mkpf~budat AS budat
mkpf~cpudt AS cpudt
mseg~mjahr AS mjahr
mseg~mblnr AS mblnr
mseg~zeile AS zeile
INTO CORRESPONDING FIELDS OF TABLE itab
FROM mkpf
JOIN mseg
ON mkpf~mandt = mseg~mandt
AND mkpf~mblnr = mseg~mblnr
AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN budat
AND mseg~bwart IN bwart
AND mseg~werks IN werks
%_HINTS ORACLE '&SUBSTITUTE VALUES&'.
SELECT DISTINCT
mseg~bwart AS bwart " 이동유형
mseg~werks AS werks " 출고 플랜트
SUM( mseg~menge ) AS menge " 입고수량
SUM( mseg~dmbtr ) AS dmbtr " 입고금액
APPENDING CORRESPONDING FIELDS OF TABLE itab
FROM mkpf
INNER JOIN mseg
ON mkpf~mandt = mseg~mandt
AND mkpf~mjahr = mseg~mjahr
AND mkpf~mblnr = mseg~mblnr
WHERE mkpf~budat BETWEEN fr_budat AND to_budat
AND mseg~xauto = ''
AND mseg~bwart IN s_bwart
AND mseg~werks IN s_werks
GROUP BY mseg~bwart
mseg~werks
* %_HINTS ORACLE 'ORDERED USE_NL (T_00 T_01)'.
* %_HINTS ORACLE 'RULE'.
* HINTS 를 이렇게 쓰는 이유가 뭔지 궁금하구요,,,,
* 왜 이런 구문으로 써야 하는지도 궁금하네요... 좀 알려주세요~~~
* 그냥 쓰라고 해서 쓰긴 했는데,,,, 이유도 모르고 쓰는 거라.. 헹~
댓글 6
-
나도아밥퍼
2007.08.16 07:59
-
김지성
2007.08.16 17:08
서울역~인천역...ㅎㅎㅎ..아주 좋은 예네요.. -
SSong
2007.08.16 18:23
정말 좋은 예 같습니다 . 이해가 팍팍 되네요 ^^
-
mean
2007.08.16 18:55
정말 이해가 팍팍 되네요. 센스있는 답변이예요 !ㅋ -
김창훈
2007.08.16 18:56
오우~~ 명쾌한 설명감사합니다~~~
-
홍길동
2007.08.17 05:13
덕분에 공부 잘 하고 있습니다.
오호랏..open sql에서도 사용이 가능하군요..저는 native sql에만 사용을 해봐서요....
힌트는 단지 힌트입니다. 어떻게 설명해야 할지 좀 그런데요.
사용자가 쿼리를 작성하여 실행하면
오라클 옵티마이저라고 하는 놈이 실행계획을 세우고
그 실행계획에 따라 자료를 조회하게 됩니다.
특히 order by 같은걸 사용하면 full scan을 하게되죠..
풀스캔할 필요가 없는데 풀스캔을 해야할 경우 인덱스는 맨 상단에서 아래로 읽어오게 됩니다.
이럴때 hints를 줘서 인덱스를 밑에서 위로 읽어오라는 길 안내를 해주는게 힌트(hints)가 되는거죠.
가끔은 엉뚱한 실행계획을 세워서 쿼리 성능이 떨어지기도 하는데요.
이때 옵티마이져가 사용자가 원하는 실행계획을 세울수 있도록 힌트를 주게 됩니다.
하지만 힌트는 명령이 아니고 말 그대로 힌트입니다.
간단히 예를 들면.
옵티마이저한테 서울역에서 인천역까지 가라고 했습니다.
그러면 우리는 1호선만 타고 가겠지라고 생각하는데 이 옵티마이저는 여러 노선을 환승하면서 가는 경우가 생기거든요.
그래서 힌트로 '야 임마 1호선만 타고 가면 빨라'라고 힌트를 주면 '아 그렇구나!'라고 정신을 차리게끔 명령해주는 것입니다.
좋은예를 잘 설명한것 같아서 복사해 봤습니다. 이해해주세요..