Proc 에서 Parallel Hint 사용시 주석 해제 법이 궁금합니다...
글쓴이: sincerely0 / 작성시간: 토, 2016/04/02 - 2:42오후
sqlplus에서는
SELECT /*+ parallel(a 4) */ count(*)
FROM 테이블
WHERE 조건
이내용이 잘 되는데
proc 안에 넣을려고 하니 /*+ parallel(a 4) */ 이부분이 주석이 되어 버립니다.
\ 역슬래쉬도 먹지 않고 인터넷에서 찾아본
EXEC SQL SELECT %str(/)%str(*)+ parallel(a 4) %str(*)%str(/)
이내용도 통하지 않더라고요.
어떻게 해야 넣을수 있을까요?
Forums:
Pro*C를 사용할 수 있는 환경이 안 되므로 문서만
Pro*C를 사용할 수 있는 환경이 안 되므로 문서만 찾아봤습니다.
Pro*C/C++ Programmer's Guide - Embedded SQL - Optimizer Hints
http://docs.oracle.com/cd/E11882_01/appdev.112/e10825/pc_06sql.htm#i6874
위 문서를 보면, 따로 처리를 안 해줘도 옵티마이저 힌트를 사용할 수 있는 것처럼 나옵니다.
그리고, Pro*C 프리컴파일러는 C/C++ 프리프로세서보다도 먼저 소스파일을 처리하므로
힌트를 알리는 /*+ .. */ 부분이 보존된 소스를 접하게 됩니다.
.pc 파일이 프리컴파일러에 의해 .c/.cpp 파일로 변환되고 나면
EXEC SQL ... 같은 Pro*C query는 이미 C/C++ 문자열로 바뀌어 있으므로
C/C++ 프리프로세서에 의해 힌트가 주석으로 간주되어 사라지지는 않을 겁니다.
Pro*C는 써 본지 꽤 오래 되어서 힌트를 쓴 적이 있는지 없는지 가물가물하네요.
프리컴파일된 .c/.cpp 파일을 보시면 힌트가 보존되어 있는지 아닌지 확인 가능할 것입니다.
감사합니다! 이내용이 필요 했었는데
감사합니다! 이내용이 필요 했었는데
sqlstm.stmt = "select /*+ parallel(a, 4) +*/ count(*) into :b0 from\
OTP_STATISTIC a ..."
프리컴파일된 .c 파일을 본 결과 보전되있는것 처럼 보입니다.
또한 1300만건 정도의 자료로 검증 해볼 예정입니다.
답변 감사합니다!
댓글 달기