DB/Oracle

[Oracle] INSERT 내부에 SELECT절

junnnhhh 2025. 10. 16. 20:27
728x90

최근 개발하는 것 중 테이블에 신규 컬럼 추가가 필요해서 추가를 하였다.

 

분명 관련 테이블 쿼리 중 영향도가 있을만한 것을 검토하고 반영을 했는데, 오류가 발생했다...

`ORA-00947: not enough values ...`

insert 할 때, 테이블의 컬럼 수를 못채운 상태로 작업을 해서 발생한 오류이다.

 

오류난 쿼리를 보니깐 아래 쿼리에서 발생한 오류였다.

/*
기존 TABLE1의 컬럼 = PK1, COL1, COL2
현재 TABLE1의 컬럼 = PK1, COL1, COL2, COL3
*/

-- 오류가 발생한 쿼리
INSERT INTO TABLE1
(
    SELECT 
        A.PK1 + 1, -- PK가 값이 다른 상태로 넣는다는 것을 표현
        A.COL1,
        A.COL2
 	FROM TABLE1 A
    WHERE A.PK1 = 1
)

 

INSERT문 안에 VALUES절이 없고 SELECT를 하고 그대로 INSERT 처리를 하는 쿼리였다.

따라서 VALUES절이 명시되어 있지 않기 때문에 SELECT 할 때, COL3에 대한 정보도 들어가야했다...

개발할 때, 분명 검토한다고 하긴 했는데, 꼼꼼하지 못했던 것 같다...

앞으로는 더 세심하게 살펴봐야겠다!

 

해결방안)

1. SELECT절에 신규 컬럼 추가

2. INSERT문에 VALUES절 추가

 

그리고 VALUES절에 대상 컬럼들을 명시하면 테이블 컬럼 추가가 있을 때, 영향도가 없기 때문에

항상 VALUES절을 명시해주는 방법으로 작업을 하는 것이 좋겠다.

728x90