기본 환경: IDE: SQL Developer, Language: Oracle SQL

 

 

발생 Error

Oracle SQL로 다음 Source Code를 실행할 경우,

⚠️ 다음과 같은 Error 발생

ORA-00934: 그룹 함수는 허가되지 않습니다
00934. 00000 -  "group function is not allowed here"

 

 

발생 원인

WHERE 조건절은 RECORD(ROW) 1개씩 검토하므로 그룹함수*(SUM, AVG, MAX 등)를 사용할 수 없음

* 그룹 함수: 테이블의 전체 행을 하나 이상의 컬럼을 기준으로 컬럼값에 따라 그룹화하여 그룹별로 결과를 출력하는 함수

 

 

해결방법

HAVING 절을 추가적으로 사용

👉 기본 환경

- Language: Oracle

 

 

⌨️ 코드

1
2
3
4
5
6
7
  SELECT TO_CHAR(DATETIME'hh') HOUR, COUNT(*) COUNT
    FROM ANIMAL_OUTS
GROUP BY TO_CHAR(DATETIME'hh')
  HAVING TO_CHAR(DATETIME'hh24'>= '09' AND TO_CHAR(DATETIME'hh24'< '20'
ORDER BY HOUR
;
 
 

 

 

🖨️오류

ORA-00979: not a GROUP BY expression

 

 

📡 원인

집계함수(SUM, AVG 등)를 제외하고 GROUP BY절에 없는 열을 SELECT에서 조회하거나 HAVING에서 사용

 

 

📰 해결 방법

1
2
3
4
5
6
7
  SELECT TO_CHAR(DATETIME'hh') HOUR, COUNT(*) COUNT
    FROM ANIMAL_OUTS
GROUP BY TO_CHAR(DATETIME'hh')
  HAVING TO_CHAR(DATETIME'hh'>= '09' AND TO_CHAR(DATETIME'hh'< '20'
ORDER BY HOUR
;
 
 

 

 기본 환경: IDE: SQL Developer, Language: Oracle SQL

 

 

발생 Error

Oracle SQL로 다음 Source Code를 실행할 경우,

⚠️ 다음과 같은 Error 발생

ORA-30076: 발췌 소스에 발췌 필트가 부적당합니다

30076. 00000 -  "invalid extract field for extract source"
*Cause:    The extract source does not contain the specified extract field.

 

 

발생 원인

EXTRACT() 사용 시, 데이터 형식에 유의

(일자) YEAR, MONTH, DAY: DATA TYPE = DATE OR DATATIME

(시간) HOUR, MINUTE, SECOND ...: DATA TYPE = DATETIME

 

SYSDATE: DATE TYPE > EXTRACT()로 시간을 추출 할 수 없음

 

 

해결 방법

SYSDATE 대신 SYSTIMESTAMP 형식 사용

 

 

참고 자료

📑 [Oracle] ORA-30076: 발췌 소스에 발췌 필트가 부적당합니다. 해결방법