오라클 11.1 과 11.2 간의 차이? (GROUP BY 절) 0 2 3,424

by 미타 [설치/설정] oracle [2018.05.09 10:12:25]


안녕하세요, 

쿼리 수정중에 궁금한 점이 생겨서 질문 여쭙습니다.

아래와 같은 형태의 쿼리가 어떤 서버에서는 실행이 되고, 어떤 서버에서는 안되서 이유를 알아보고 있는데요.

with TBL as (
	select '1' as col, 'dummy' as dummy from dual
	union all
	select '2' as col, 'dummy' as dummy from dual
)
select count(*)
from (select * from TBL group by col )

테이블의 여러 컬럼 중에 한 컬럼만을 group by 해서 count 하는 쿼리입니다.

에러는 'ORA-00979: GROUP BY식이 아닙니다' 라고 에러가 뜨는데요.
아직 DB에 대해 깊이 알지는 못하지만,
어찌보면 group by 하면서 * 로 SELECT 한 결과를 count 하는데, 에러가 나는게 당연한 것이 아닌가 싶기도 합니다만..
어찌됐던 실행되는 환경이 있으니 이유가 궁금합니다.

직접 조사해 볼 수 있는 범위가 넓지 않아서, 일단 버젼만 한번 확인해보니 

실행이 되는쪽은     Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - 64bit Production
실행이 안되는 쪽은 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

네요, 그래서 버젼간의 차이는 아닌가? 혹시 다른것(설정 등)이 있는것일까 하고 질문 드리게 되었습니다.
첫 글을 질문글로 남기게 되었습니다만. 잘 부탁드립니다

by 마농 [2018.05.09 11:38:09]

네. 문법상으로는 에러가 나는게 당연한 거구요.
에러가 안나는 것은 오라클 옵티마이져가 오지랖이 넓어서 그런게 아닐까 생각되네요.
* 를 사용했지만. 결국 필요한것은 * 가 아니라 COUNT 이므로
중간 처리과정에서 불필요한 항목을 가져오지 않는 것이 아닐까? 생각되네요.
쿼리 변형 과정에서의 버그라고 생각되네요.
옵티마이저가 똑똑해지면서 그에 따른 버그도 생기는 듯 하네요.
후속버전에서 에러나는것으로 보아 버그가 고쳐진 듯.
제 버전은 11.2.0.1.0 인데 에러 안나네요.


by 미타 [2018.05.09 14:16:23]

감사합니다!! 역시 문법상 정상적인(?)건 아니었군요ㅠㅠ

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