데이터베이스/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