본문 바로가기
Database/Oracle

[ORACLE] ORA-00900 : SQL command not properly ended 오류의 원인과 해결 전략

by Papa Martino V 2025. 7. 27.
728x90

ORA-00900 : SQL command not properly ended 오류의 원인과 해결 전략
[ORACLE] ORA-00900

 

Oracle Database를 사용하는 많은 개발자와 DBA들이 가장 자주 접하는 오류 중 하나가 바로 ORA-00900: invalid SQL statement입니다. 이 오류는 단순해 보이지만 다양한 원인으로 발생할 수 있으며, 초보자뿐만 아니라 숙련자에게도 때로는 난해하게 다가올 수 있습니다. 본 글에서는 단순 구문 오류를 넘어선 구조적 이해와 함께, 실무에서 자주 마주치는 사례들을 중심으로 ORA-00900 오류의 원인과 해결 전략을 심층적으로 다루어보겠습니다.

1. ORA-00900 오류란?

ORA-00900 오류는 Oracle에서 SQL 문이 올바르게 종료되지 않았을 때 발생하는 메시지로, 주로 문법 오류, 명령어 부적절 사용, PL/SQL과 SQL의 문맥 혼동 등에 의해 유발됩니다.

오류 메시지 형식:

ORA-00900: invalid SQL statement

이 메시지는 단순히 "SQL 문이 유효하지 않다"는 의미이므로, 실제 문제의 원인은 다른 구문 또는 문맥에서 비롯되었을 가능성이 높습니다.

2. ORA-00900 오류가 발생하는 주요 원인

원인 유형 세부 설명 예시
PL/SQL 구문을 SQL*Plus에서 실행 BEGIN ... END는 PL/SQL 블록으로 SQL 문장에서 사용 불가 BEGIN dbms_output.put_line('Hello'); END;
세미콜론 누락 또는 과다 SQL 문 끝에 세미콜론을 빼먹거나 잘못된 위치에 삽입 SELECT * FROM employees
명령어 위치 오류 SET, SHOW, DESC 등은 SQL 문이 아닌 명령어 SET AUTOCOMMIT ON
JDBC/ORM 구문 호환 오류 JDBC 등에서 SQL*Plus 전용 구문을 사용할 때 SHOW USER
잘못된 동적 SQL 구문 EXECUTE IMMEDIATE 등 사용 시 문장 끝 처리 오류 EXECUTE IMMEDIATE 'UPDATE employees SET salary = salary * 1.1'

3. ORA-00900 오류 해결 전략

해당 오류는 근본적으로 SQL 또는 PL/SQL 문법에 대한 이해 부족에서 비롯되므로, 다음과 같은 절차로 문제를 해결할 수 있습니다.

1) 실행 환경 확인

  • SQL*Plus, SQL Developer, TOAD, JDBC 등 환경별 명령 해석 차이 확인
  • 명령어가 SQL 문인지 환경 명령인지 구분 필요

2) SQL 문법 검증

  • FROM, WHERE, SET 등 필수 키워드 누락 여부 점검
  • 세미콜론과 슬래시( / )의 적절한 사용 확인

3) PL/SQL 문장의 경우

  • PL/SQL 블록 실행 시 SQL*Plus에서는 BEGIN ... END; 다음에 / 추가
  • SQL Developer에서는 자동 인식되므로 세미콜론만 사용

4) JDBC 사용 시 주의사항

  • SQL 명령어만 실행 가능, Oracle 전용 명령어는 오류 발생
  • SHOW, DESC는 JDBC에서 실행 불가

4. 실무에서 발생한 사례 분석

사례 1: PL/SQL 블록 오류


  BEGIN
    dbms_output.put_line('Test');
  END;
  

→ SQL*Plus에서는 위 문장 실행 시 ORA-00900 발생. 이유는 실행 종료 기호인 /가 누락되었기 때문입니다.

해결 방법:


  BEGIN
    dbms_output.put_line('Test');
  END;
  /
  

사례 2: JDBC 환경에서 SHOW USER

SHOW USER는 SQL*Plus 명령어로, JDBC에서는 지원하지 않아 ORA-00900 오류가 발생합니다.

해결 방법: SELECT USER FROM DUAL;로 대체

5. 자주 묻는 질문(FAQ)

질문 답변
ORA-00900 오류가 발생했는데 코드에는 이상이 없어 보입니다. 실행 환경의 문법 해석 차이 또는 PL/SQL과 SQL의 문맥 혼동을 의심해 보아야 합니다.
DESC 테이블명 문장에서 오류가 발생합니다. DESC는 SQL 문장이 아니라 SQL*Plus 명령입니다. SQL 환경에서는 SELECT column_name FROM user_tab_columns WHERE table_name='테이블명';을 사용하세요.
프로그램에서 PL/SQL 블록을 실행할 수 없나요? JDBC 등에서는 PL/SQL 문장을 execute 또는 prepareCall로 감싸야 합니다.

6. 예방 전략

  • SQL 문장은 항상 ANSI 표준에 맞게 작성
  • SQL 환경마다 명령어 차이가 있으므로 도구별 차이를 숙지
  • 자동화 도구 사용 시, 명령어 변환 로직 점검
  • PL/SQL과 SQL의 차이를 명확히 이해하고 구분하여 사용

7. 결론

ORA-00900 오류는 초보 개발자뿐 아니라 경험 많은 전문가도 종종 마주하는 오류입니다. 단순 구문 오류처럼 보이지만, 실은 SQL 실행 환경과 명령어 컨텍스트에 대한 깊은 이해가 필요한 영역입니다. 이 오류를 정확히 파악하고 처리하는 능력은 개발자와 DBA 모두에게 있어 매우 중요한 기본기이며, 더 나아가 Oracle 기반 시스템의 안정성과 신뢰성을 높이는 핵심 요소입니다.

출처:

728x90