데이터베이스/ORACLE
오라클 데이터베이스 [ORA-00933, ORA-00904, ORA-00001] 오류
멈머이
2025. 5. 27. 00:19
728x90
1. ORA-00933: SQL command not properly ended
- 의미 : SQL 문이 문법적으로 잘못 종료됨.
- 원인 : ORDER BY, GROUP BY 등의 문법이 잘못되었거나, INSERT, UPDATE, SELECT 구문의 문법 오류
String sql = "SELECT * FROM users;";
-- 오류 원인: Java, JDBC, MyBatis 등에서는 세미콜론 ; 제거해야 함
-- 해결방법 : SQL 구문 구조 다시 확인 (특히 JOIN, ORDER BY 부분)
-- 올바른 예
String sql = "SELECT * FROM users";
2. ORA-00904: "컬럼명": invalid identifier
- 의미 : 컬럼 이름이 잘못되었거나 존재하지 않음
- 원인 : 컬럼 이름 오타, 대소문자 구분 문제 (쌍따옴표로 지정한 경우), 컬럼이 실제 테이블에 존재하지 않음
SELECT usrname FROM users;
-- 오류 원인: 컬럼명 오타 (usrname → username)
-- 올바른 예
SELECT username FROM users;
-----------------------------------------------------------------
CREATE TABLE test ("Name" VARCHAR2(20));
SELECT name FROM test;
-- 오류 원인: "Name"처럼 쌍따옴표 사용 시 대소문자 구분
-- 올바른 예
SELECT "Name" FROM test;
3. ORA-00001: unique constraint (제약조건명) violated
- 의미 : 유일해야 할 컬럼에 중복된 값 삽입 시 발생
- 원인 : PRIMARY KEY, UNIQUE 제약조건을 가진 컬럼에 중복된 값 삽입, 시퀀스를 사용하지 않고 수동으로 중복 값 입력
-- users 테이블에 user_id가 기본키라고 가정
INSERT INTO users (user_id, username) VALUES (1, 'Alice');
INSERT INTO users (user_id, username) VALUES (1, 'Bob');
-- 오류 원인: user_id가 중복
-- 해결 방법 (다른 ID 사용)
INSERT INTO users (user_id, username) VALUES (2, 'Bob');
-- 해결 방법 (시퀀스 사용)
CREATE SEQUENCE user_seq START WITH 1 INCREMENT BY 1;
INSERT INTO users (user_id, username) VALUES (user_seq.NEXTVAL, 'Charlie');
728x90