[Language]/SQL

SQL Error [933] [42000]: ORA-00933: SQL command not properly ended

soheepark 2024. 7. 1. 12:39
728x90
반응형

SQL Error [933] [42000]: ORA-00933: SQL command not properly ended

해당 오류는 SQL 문장이 올바르게 종료되지 않았거나, 구문적으로 잘못된 부분이 있음을 나타낸다.

  1. 구문 오류 : SQL 문법이 잘못되었을 때 발생
  2. 부적절한 키워드 사용 : 특정 SQL 키워드가 잘못 사용되었을 때 발생
  3. 불필요한 세미콜론 또는 콤마
  4. 호환되지 않는 SQL 기능 사용 : 사용 중인 Oracle 버전에서 지원하지 않는 SQL 기능을 사용할 때 발생

1. 원인

현재 Oracle 12 Client 버전을 사용 중이며, 내가 배정 된 프로젝트의 Oracle 버전은 11g이다.

아래는 내가 시도했다가 해당 에러를 만나게 된 쿼리이다.

SELECT 컬럼
FROM 테이블
WHERE 컬럼 = '02'
FETCH FIRST 10 ROWS ONLY;

FETCH FIRST절은 Oracle에서 ROWNUM과 비슷한 결과를 내는 키워드이다.

해당 키워드를 사용하면 결과를 제한할 수 있다.

 

처음에 해당 쿼리를 사용하고 에러가 나서, 

ORDER BY절이 없는 경우 제대로 작동하지 않을 수 있는 가능성이 있기에

ORDER BY절을 추가하고 다시 시도했다.

SELECT 컬럼
FROM 테이블
WHERE 컬럼 = '01'
ORDER BY 컬럼
FETCH FIRST 10 ROWS ONLY;

해당 쿼리는 컬럼의 값이 '01'인 레코드 중 컬럼 기준으로 정렬하여 상위 10개를 반환한다는 의미이다.

그러나 해당 쿼리문을 작성해도 동일한 에러가 났다.

 

원인은 FETCH FIRST절은 Oracle 12 Client 이상에서 사용 가능한 기능이기 때문이다.

내 Oracle 버전은 12 client이지만, 현재 접속한 Oracle 버전은 11g이기 때문이다.

 

따라서 나는 FETCH FIRST절을 사용할 수 없는 상황이다.

 

2. 해결

 

FETCH FIRST절을 사용할 수 없는 경우, ROWNUM으로 대체하여 사용하면 된다.


Oracle에서 ROWNUM으로 결과 길이를 제한시키는 방법은 아래 포스팅에서 확인하길 바란다.

https://soheepark.tistory.com/173

 

[Oracle] 결과값 표시 제한 (LIMIT, ROWNUM)

쿼리 결과 데이터를 10줄로 제한하여 보고 싶다면 MySQL의 경우, LIMIT를 사용하면 된다.그러나 Oracle에서는 LIMIT를 사용할 수 없다. Oracle에서 결과값을 제한하여 보고 싶다면 ROWNUM을 사용해야 한다.

soheepark.tistory.com

 

728x90
반응형