오라클 데이터베이스에서 데이터 조작어(Data Manipulation Language) 중 하나인 insert를 하는 방법에 대해 안내해드리겠습니다!
우선 인서트 구문을 테스트 하려는 테이블을 소개하겠습니다.
테이블 이름은 TB_TEST 이며,
컬럼은 총 3개, V(VARCHAR2), N(NUMBER), D(DATE)로 이루어져 있다고 가정하겠습니다.
별도의 키 컬럼은 설정하지 않겠습니다~
INSERT (col) INTO VALUES
인서트 구문에서 컬럼을 지정하는 방법을 우선 소개하겠습니다. 가장 일반적으로 사용하는 구문이기도 하지요. 문법(syntax)는 다음과 같습니다.
--syntax
INSERT INTO [schema.]table_Name (col1, col2, ... colN)
VALUES (colVal1, colVal2, ... colValN);
테스트 테이블에서 [V]컬럼에 'You', [N]컬럼에 1 을 넣고자 하면 아래와 같이 할 수 있습니다.
INSERT INTO USER_NAME.TABLE_NAME (V, N)
VALUES ('You', 1);
테이블과 함께 괄호를 통해 넣으려는 칼럼을 지정할 수 있습니다.
INSERT INTO TABLE_NAME (V, N)
VALUES ('1', 1);
INSERT INTO VALUES
INSERT INTO VALUES 구문은, 아까 소개한 인투 밸류 구문에서 괄호가 빠진 형태입니다.
테이블 이름 뒤에 괄호 이후 컬럼을 나열 안 하는 경우입니다. 이때에는 모든 컬럼 값을 입력하겠다는 약속이랍니다. 문법은 다음과 같습니다
[syntax]
INSERT INTO [schema.]table_Name
VALUES (colVal1, colVal2, ... colValN);
테스트 테이블은 아이디 순서대로 V, N, D 컬럼이 정의되어 있으므로 그대로 입력합니다.
--칼럼 아이디 순서대로 입력하셔야 합니다.
INSERT INTO USER_NAME.TABLE_NAME
VALUES ('I', 2, TO_CHAR (SYSDATE, 'YYYY-MM-DD'));
INSERT INTO table Name Values 구문입니다. VALUES 에 값을 입력해 주면 됩니다.
INSERT INTO TABLE_NAME VALUES ('1', 1, SYSDATE);
괄호를 생략하는 것은 모든 컬럼을 명시하는 것과 동일한 효과입니다 (specifying all table column)
INSERT INTO USER_NAME.TABLE_NAME (V, N, D)
VALUES ('I', 2, TO_CHAR (SYSDATE, 'YYYY-MM-DD'));
--이 경우, 아래의 모든 값을 괄호 안에 명시하는 문장과 동일합니다.
INSERT INTO USER_NAME.TABLE_NAME
VALUES ('I', 2, TO_CHAR (SYSDATE, 'YYYY-MM-DD'));
INSERT INTO SELECT
insert into select는 인서트 하려는 컬럼을 직접 SELECT 하여 입력하는 기능을 제공합니다. 문법은 다음과 같습니다.
--[syntax]
INSERT INTO [schema.]table_Name (col1, col2, ... colN)
SELECT STATEMENT;
다음 예시는 emp 테이블에서 empno 가 7839 인 직원을 조회하여 insert 합니다.
INSERT INTO USER_NAME.TABLE_NAME (V, N, D)
SELECT ENAME, EMPNO, HIREDATE
FROM EMP
WHERE EMPNO = 7839;
INSERT INTO table Name Select 구문입니다. SELECT 를 통해 다른 테이블을 참조할 수 있는 등 유용하게 사용할 수 있습니다.
INSERT INTO TB_TEST
SELECT '1', 1, SYSDATE FROM DUAL;
INSERT 오류 해결 방법
insert 구문은 값의 수에 따라 오류가 발생할 수 있습니다.
ORA-00947: 값의 수가 충분하지 않습니다
ORA-00913: 값의 수가 너무 많습니다
테이블 뒤 괄호보다 넣으려는 값이 많은 경우 ORA-00913: too many values 오류가 발생합니다. 값의 수가 너무 많기 때문입니다.
--ORA-00913: too many values
INSERT INTO TB_TEST (V, N)
SELECT '1', 1, SYSDATE FROM DUAL;
ORA-00947: 값의 수가 충분하지 않습니다
INSERT INTO tableName [ VALUES | SELECT ] 는 해당 테이블에 관한 모든 칼럼을 명시해야 합니다. 누락되는 경우, ORA-00947: not enough values 오류가 발생합니다.
--ORA-00947: not enough value
INSERT INTO TB_TEST
VALUES ('1');