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