코딩헤딩

오라클 데이터베이스 [ORA-01843, ORA-00911, ORA-00907] 오류 본문

데이터베이스/ORACLE

오라클 데이터베이스 [ORA-01843, ORA-00911, ORA-00907] 오류

멈머이 2025. 6. 3. 02:26
728x90

1.  ORA-01843: not a valid month

  • 의미 : 날짜 입력값이 유효한 월 형식이 아님
  • 원인 : TO_DATE() 함수에 잘못된 날짜 문자열 전달, 날짜 포맷 MM, MON, MONTH 혼동
SELECT TO_DATE('2024-13-01', 'YYYY-MM-DD') FROM dual;
-- "13"은 존재하지 않는 월

	-- 해결 방법
SELECT TO_DATE('2024-12-01', 'YYYY-MM-DD') FROM dual;
-- 또는 문자열이 포맷과 일치하는지 확인 필수, 항상 TO_DATE()에는 포맷 명시

 

 

2. ORA-00911: invalid character

  • 의미 : SQL 문에 유효하지 않은 문자 포함
  • 원인 : SQL 문 끝의 세미콜론 ; 포함 (JDBC, MyBatis 등에서는 오류), 특수문자 포함 (&, @, # 등)
String sql = "SELECT * FROM users;";

	-- 해결 방법
String sql = "SELECT * FROM users";

-- 또는
SET DEFINE OFF;
SELECT 'A&B' FROM dual;

.

 

 

3. ORA-00907: missing right parenthesis

  • 의미 :  닫는 괄호 )가 빠졌거나 위치 오류
  • 원인 : 함수, 조건절에서 괄호 짝 안 맞음, IN, VALUES 절에 괄호 잘못 씀
SELECT * FROM users WHERE username IN 'Alice', 'Bob';

	-- 해결 방법
SELECT * FROM users WHERE username IN ('Alice', 'Bob');
-- 또는
SELECT * FROM users WHERE dept_id IN (SELECT id FROM department);

 

MyBatis나 JDBC 사용할 때는 SQL 문 끝에 " ; " 빼기.
웹 환경에서 문자열로 SQL을 보내기 때문에 세미콜론은 파싱 오류.

728x90