ORA-00947: 값의 수가 충분하지 않습니다
ORA-00947: 값의 수가 충분하지 않습니다 오류는 주로 오라클 데이터베이스에서 인서트를 시도할 때에 발생합니다. 예제와 함께 해결 방법을 알아보도록 합시다.
다음은 이번 예제에서 사용 할 'employees' 테이블을 생성하는 SQL 명세입니다. 이 명세를 기반으로 테이블을 만들어보겠습니다. 기본키, 이름과 성, 급여로 간단하게 만들 예정입니다.
CREATE TABLE employees (
employee_id INT PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50),
salary INT
);
- employee_id: 정수형으로, 기본 키로 설정하였습니다.
- first_name: 최대 50자의 문자열, 이름을 저장할 수 있는 열입니다.
- last_name: 최대 50자의 문자열, 성을 저장할 수 있는 열입니다.
- salary: 정수형으로 급여 정보를 저장하는 열입니다.
ORA-00947: not enough values 오류는 설명에서도 알 수 있듯이, SQL문에서 값이 충분하지 않기 때문에 발생합니다. 이 문제를 이해하고 해결하는 데 도움이 될 수 있도록 예제를 함께 살펴보겠습니다~
ORA-00947: not enough values
예를 들어 'employees'라는 테이블이 있고 해당 테이블에는 위와 같이, employee_id, first_name, last_name, salary 라는 열이 있다고 가정해 봅시다.
새로운 직원을 'employees' 테이블에 삽입하려고 할 때, 열 중 하나에 대한 값을 누락한 경우 ORA-00947 오류가 발생할 수 있습니다. 다음은 ORA-00947 오류가 발생하는 예시입니다.
INSERT INTO employees (employee_id, first_name, last_name, salary)
VALUES (1, 'Beom', 'Sang');
ERROR at line 1:
ORA-00947: not enough values
이 경우 'salary' 컬럼에 대한 값을 제공하지 않았기 때문에 ORA-00947 오류가 발생하게 된답니다. 참고로 컬럼을 명시적으로 설정하지 않는 경우, 모든 컬럼에 대한 인서트로 간주하기에 다음과 같이 동일한 오류가 발생합니다.
INSERT INTO employees
VALUES (1, 'Beom', 'Sang');
ERROR at line 1:
ORA-00947: not enough values
이 문제를 해결하려면 INSERT 문에서 모든 열에 대한 값을 제공해야 하며, 해결 방법은 다음과 같습니다.
INSERT INTO employees (employee_id, first_name, last_name, salary)
VALUES (1, 'Beom', 'Sang', 50000);
1 row created.
INSERT INTO employees
VALUES (1, 'Beom', 'Sang', 50000);
1 row created.
위의 인서트 문에서는 'salary' 열에 대한 값까지 모두 포함하여 ORA-00947 오류를 방지했습니다.
추가적으로 'ORA-00947: 값의 수가 충분하지 않습니다' 문제를 사전에 방지하기 위하여, 미리 인서트 구문에 해당 컬럼을 명시하는 방법이 있습니다. 이를 통해 추후 컬럼이 추가되는 경우에도 오류 없이 인서트를 정상적으로 실행할 수 있다는 장점이 있습니다. 다만, 이 때에는 의도하지 않게 해당 컬럼 값을 인지하지 못하여 누락하는 경우도 있으니, 충분히 검토하여 설정해 주세요.
INSERT INTO employees (employee_id, first_name, last_name)
VALUES (1, 'Beom', 'Sang');
1 row created.