[Oracle] 오라클 INSERT 방법 & 노하우 정리 (데이터 입력)

오라클에서 테이블에 데이터를 입력할 때는 INSERT 문을 사용하면 된다. INSERT 문은 SQL의 아주 기본이지만 상황에 따라서 다양한 방법으로 사용할 수 있으니, 아래를 예제를 참고하면 앞으로 INSERT 문의 활용에 도움이 될 것이다.

 

오라클 INSERT 문

기본 사용법 1

INSERT INTO emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
VALUES (7788, 'SCOTT', 'ANALYST', 7566, '1987-04-19', 3000, NULL, 20)

 

INTO 절의 컬럼 개수와 데이터 타입이 VALUES 절의 컬럼 개수와 데이터 타입이 동일해야 한다. VALUES 절에 테이블의 모든 컬럼이 나열되어 있다면, INTO 절의 컬럼을 생략할 수 있지만, INTO 절에 입력할 컬럼을 모두 나열하는 방식을 권장한다.

 

기본 사용법 2 (컬럼명 생략)

INSERT INTO emp
VALUES (7788, 'SCOTT', 'ANALYST', 7566, '1987-04-19', 3000, NULL, 20)

 

VALUES 절에 입력할 테이블의 모든 컬럼이 나열되어 있다면 INTO 절의 컬럼은 생각해도 된다. 실무에서 쿼리를 작설할 때는 꼭 INTO 절에 컬럼을 모두 작성할 것을 권장한다. 테이블에 컬럼이 추가되거나 삭제되었을 경우 기존 쿼리문에 오류가 발생할 수 있기 때문이다.

 

일련번호 채번 후 INSERT (MAX + 1)

INSERT INTO emp ( empno
                , ename
                , job
                , mgr
                , hiredate
                , sal
                , comm
                , deptno
                )
         VALUES ( (SELECT NVL(MAX(empno), 0) + 1 FROM emp)
                , 'SCOTT'
                , 'ANALYST'
                , 7566
                , TO_DATE('1987-04-19', 'YYYY-MM-DD')
                , 3000
                , NULL
                , 20
                )

 

VALUES 절에서 서브 쿼리를 사용하여 일련번호를 매번 후 INSERT를 수행할 수 있다. 오라클은 컬럼에 자동 증가 옵션이 없기 때문에, 시퀀스 또는 MAX + 1 같은 방법을 활용하여 일련번호를 생성한다.

 

서브 쿼리 INSERT (SELECT INSERT)

INSERT INTO emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
SELECT 8000
     , a.ename
     , a.job
     , a.mgr
     , a.hiredate
     , a.sal
     , a.comm
     , a.deptno
  FROM emp a
 WHERE a.empno = 7788

 

VALUES 절 대신에 서브 쿼리를 사용하여 여러 건의 데이터를 INSERT 하거나, 기본 값을 조회 후 파라미터로 전달된 값과 합쳐서 INSERT를 할 때 사용한다.

 

[Oracle] 오라클 SELECT 해서 INSERT 하는 방법 (여러개, 서브쿼리)

오라클에서 쿼리문을 작성할 때 SELECT INSERT를 사용해야 할 경우가 많다. 기본 자료를 조회 후 전달받은 인자 값과 결합하여 INSERT 하거나, 이력 데이터를 저장할 때 자주 사용한다. SELECT INSERT의 경

gent.tistory.com

INSERT ALL, FIRST 사용법

INSERT ALL
  WHEN sal >= 3000 THEN
       INTO emp_sal1 VALUES (empno, ename, sal)
  WHEN sal >= 2000 THEN
       INTO emp_sal2 VALUES (empno, ename, sal)   
  ELSE
       INTO emp_sal3 VALUES (empno, ename, sal)
SELECT a.empno
     , a.ename
     , a.sal
  FROM emp a
 WHERE a.empno = 7788  

 

INSERT ALL을 사용하면 한 번에 여러 개의 테이블에 INSERT를 할 수 있다. 조건(WHEN~THEN)에 만족하면 해당 테이블에 INSERT 한다. sal이 3000인 경우 emp_sql1, emp_sal2 두개의 테이블에 INSERT한다. (단, INSERT ALL, FIRST는 반드시 서브 쿼리와 함께 사용해야 한다)

 

INSERT FIRST
  WHEN sal >= 3000 THEN
       INTO emp_sal1 VALUES (empno, ename, sal)
  WHEN sal >= 2000 THEN
       INTO emp_sal2 VALUES (empno, ename, sal)   
  ELSE
       INTO emp_sal3 VALUES (empno, ename, sal)
SELECT a.empno
     , a.ename
     , a.sal
  FROM emp a
 WHERE a.empno = 7788 

 

INSERT FIRST는 조건에 만족하는 첫 번째 WHEN~THEN의 테이블에만 INSERT 한다. sal이 3000인 경우 emp_sql1 테이블에 INSERT한다.

 

DEFINE empno = 8800;
DEFINE ename = 'SCOTT';
DEFINE sal = 3000;

INSERT ALL
  WHEN &sal >= 3000 THEN
       INTO emp_sal1 VALUES (&empno, &ename, &sal)
  WHEN &sal >= 2000 THEN
       INTO emp_sal2 VALUES (&empno, &ename, &sal)   
  ELSE
       INTO emp_sal3 VALUES (&empno, &ename, &sal)
SELECT *
  FROM dual

 

서브 쿼리를 사용하지 않을 경우 dual을 사용하면 된다. 파라미터를 전달된 값으로 조건을 만들고 INSERT 하면 된다.

 

[Oracle] 오라클 MERGE INTO 사용법 및 노하우 정리

오라클에서 쿼리문을 작성하다 보면, 하나의 쿼리문으로 INSERT, UPDATE, DELETE 작업을 해야 하는 경우가 있다. 이럴 때에는 MERGE 문을 사용하면 간단하게 쿼리문을 작성할 수 있다. 오라클 9i부터 MERGE

gent.tistory.com

 

[Oracle] 오라클 INSERT 1씩 증가시키는 방법 (AUTO_INCREMENT)

오라클에서는 칼럼의 값을 자동으로 증가시키는 기능이 없기 때문에 INSERT 작업 시 직접 일련번호를 매번 후 데이터를 입력해야 한다. 가장 많이 사용하는 방법은 일련번호 칼럼의 마지막 값을

gent.tistory.com

 

[Oracle] 오라클 INSERT 할 때 중복 제외하는 방법

오라클에서 INSERT 할 때 PK가 중복되어서 오류가 발생하는 경우가 많다. 이럴 경우 중복을 무시하거나 중복을 제외하고 INSERT를 하거나, 미리 중복을 체크하여 INSERT가 되지 않도록 해야 한다. ORA-00

gent.tistory.com

 

댓글

Designed by JB FACTORY