pro*c 컴파일시 서브쿼리 문제.. 0 3 3,677

by 허접탱이 [SQL Query] proc 서브쿼리 sub query [2015.07.28 16:01:55]


안녕하세요.

최근 프로그램을 하나 개발을 하고 있는데...pro*c로 개발을 하고 있습니다.

쿼리 툴에서 정상적으로 수행되는걸 확인 한 후 실제 프로그램에 돌리기 위해 컴파일을 하니..

컴파일 에러가 발생을 하네요..ㅠㅠ 내용을 찾아보니..서브쿼리를 지원을 안해서 발생을 하는거 같은데..

아래의 쿼리문을 어떻게 변경을 하면 좋을까요?

일단 뽑아 오려고 하는 데이터는 아래와 같습니다.

직원 데이터가 있는 A 테이블, 직원의 이력이 담긴 B 테이블

11개월동안 이력이없는 데이터를 뽑아오는게 목적입니다.

참고로 아래의 DDD 테이블은 A 테이블 입니다.서브 쿼리를 위해 이름만 변경해서 쓴거예요..

 

select a.직원정보, a.직원등록일자, b.이력일자

from AAA a, BBB b

where a.직원정보 = b.직원정보(+)

and a.직원등록일자 < to_char(add_months(sysdate, -11), 'YYYYMMDD')

and (  (select max(nvl(d.이력일자, 0))  from DDD d where d.직원정보 = a.직원정보) < to_char(add_months(sysdate, -11), 'YYYYMMDD') or  (select max(nvl(d.이력일자, 0))  from DDD d where d.직원정보 = a.직원정보) is null)

group by a.직원정보, a.직원등록일자, b.이력일자;

 

위와같이 쿼리를 작성했는데.. 제일 마지막 조건문 때문에..컴파일이 안되고 있습니다.

저렇게 쿼리를 작성한 이유는 B 테이블에는 직원이력이 없을수도  있고, 여러건이 있을때에는 제일 최근껄 뽑아오기 위해서 입니다.

 

by 마농 [2015.07.29 09:44:27]

"참고로 아래의 DDD 테이블은 A 테이블 입니다" 라고 하셨는데요?
제생각엔 B 테이블 인 것 같네요.
AAA 가 직원이고 BBB 는 이력인듯 하고요.
 

SELECT a.직원정보
     , a.직원등록일자
     , MAX(b.이력일자) 이력일자
  FROM 직원 a
     , 이력 b
 WHERE a.직원정보 = b.직원정보(+)
 GROUP BY a.직원정보, a.직원등록일자
HAVING NVL(MAX(b.이력일자), '0') < TO_CHAR(ADD_MONTHS(sysdate, -11), 'yyyymmdd')
;

 


by 오델 [2015.07.29 12:46:40]

pro*c 컴파일러가 구버전인것에는 서브쿼리 및 case를 지원하지 않습니다.

위 마농님께서 올려 주신 쿼리로 컴파일시 해결이 안된다면 다른 방법을 찾아보시야 할것 같습니다.

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입