코딩헤딩

오라클 데이터베이스 [ORA-00904, ORA-01722, ORA-12801 + ORA-00600 / ORA-07445, ORA-10046] 오류 본문

데이터베이스/ORACLE

오라클 데이터베이스 [ORA-00904, ORA-01722, ORA-12801 + ORA-00600 / ORA-07445, ORA-10046] 오류

멈머이 2025. 8. 12. 21:24
728x90

1. ORA-00933: SQL command not properly ended

  • 의미 : SQL 문장이 문법 규칙에 맞게 끝나지 않음
  • 원인 : 잘못된 JOIN 구문, 불필요한 세미콜론, ANSI/Oracle JOIN 문법 혼용
SELECT * FROM emp e JOIN dept d ON e.deptno = d.deptno
WHERE e.sal > 3000 ORDER BY e.ename DESC,  -- 마지막에 , 잘못 기입

 

 * 해결

  • 문장 끝 불필요한 기호 제거
  • ANSI JOIN과 오라클 전통 JOIN(WHERE) 혼용 피하기

 

2. ORA-01799: a column may not be outer-joined to a subquery

  • 의미 : 외부 조인 대상이 서브쿼리인 경우
SELECT e.ename, d.dept_name
FROM emp e LEFT JOIN (SELECT * FROM dept) d
ON e.deptno = d.deptno;

-- 해결
-- 서브쿼리를 뷰나 인라인 뷰로 변경 후 JOIN
WITH dept_view AS (SELECT * FROM dept)
SELECT e.ename, d.dept_name
FROM emp e LEFT JOIN dept_view d
ON e.deptno = d.deptno;

 

 

3. ORA-02291: integrity constraint violated - parent key not found

  • 의미 : 참조 무결성 위반 (외래키 대상 부모 데이터 없음)
INSERT INTO emp (empno, deptno) VALUES (1001, 50);
-- dept 테이블에 deptno=50이 없음

-- 해결
-- 부모 테이블에 먼저 데이터 입력
-- 외래키 제약 조건 확인:
SELECT constraint_name FROM user_constraints WHERE table_name='EMP';

 

 

4. ORA-02292: integrity constraint violated - child record found

  • 의미 : 부모 데이터 삭제 시, 참조하는 자식 데이터가 남아 있음
DELETE FROM dept WHERE deptno=10;
-- emp 테이블에 deptno=10 직원이 남아 있음

-- 해결
-- 자식 데이터 먼저 삭제
-- 또는 외래키 ON DELETE CASCADE 설정

 

 

5. ORA-01427: single-row subquery returns more than one row

  • 의미 : 단일 행 서브쿼리에서 다중 행 반환
SELECT * FROM emp
WHERE deptno = (SELECT deptno FROM dept WHERE loc='NEW YORK');
-- loc='NEW YORK'인 dept가 2개 이상이면 발생

-- 해결
-- 서브쿼리에 MAX(), MIN() 등 집계 사용
-- 또는 IN 절로 변경

 

 

6. ORA-01400: cannot insert NULL into ("TABLE"."COLUMN")

  • 의미 :  NOT NULL 컬럼에 NULL 값 입력 시 발생
INSERT INTO emp (empno, ename) VALUES (NULL, 'SMITH');

-- 해결
-- NOT NULL 컬럼에 반드시 값 지정
-- DEFAULT 값 설정 고려
728x90