본문 바로가기
IT/SQLP

[Oracle] 오라클 Insert into 문법, select insert

by by디디 2022. 6. 19.
반응형

오라클 입력 문법인 Insert 문에 대해서 알아볼게요.

 

ORACLE INSERT SYNTAX

insert_statement ::=
INSERT_INTO {table_reference | [THE] (subquery1)}
 [(column_name [, column_name]...)]
 {VALUES (sql_expression [, sql_expression]...) 
 | subquery2} [RETURNING]
 [row_expression [, row_expression]... INTO 
 {variable_name | :host_variable_name} 
 [, {variable_name | :host_variable_name}]...];

 

INSERT문법은 크게 단일 건 Insert와 다중 건 Insert로 나뉘며, 각 Insert는 전체 컬럼과 지정 컬럼 문법이 다릅니다.

단일 건

단일 건 전체 컬럼 Insert 문법

전체 컬럼 Insert문은 컬럼을 지정하지 않아도 됩니다.

INSERT INTO dept
   VALUES (my_deptno, UPPER(my_dname), 'CHICAGO');

 

단일 건 지정 컬럼 Insert 문법

지정 컬럼은 컬럼명을 지정해야 합니다.

PK컬럼이나 Not null 컬럼은 필수로 지정해야 에러 발생 안 합니다.

INSERT INTO emp (empno, ename, job, sal, comm, deptno)
   VALUES (4160, 'STURDEVIN', 'SECURITY GUARD', 2045, NULL, 30);

 

다중 건

다중 건 전체 컬럼 Insert 문법

다중 건은 select 된 결과물을 Insert 하는 방법입니다.

INSERT INTO bonus 
SELECT ename, job, sal, comm 
  FROM emp
 WHERE comm > sal * 0.25;

 

다중 건 지정 컬럼 Insert 문법

INSERT INTO bonus (ename, job, sal, comm)
SELECT ename, job, sal, comm 
  FROM emp
 WHERE comm > sal * 0.25;

 


심화 문법

더미 데이터 입력

빈 테이블에 더미 데이터를 입력할 때 사용합니다.

-- PK 컬럼은 다른 값을 넣어야 하므로, rownum를 활용
INSERT INTO emp (empno, ename, job, sal, comm, deptno)
SELECT rownum, '가가가', '나나나', rownum * 1000, deptno 
  FROM dept
 WHERE rownum <= 3 -- 건수 조절
LOG ERRORS INTO errlog ('my_bad') REJECT LIMIT 10 -- 에러 체크
;

 

다중 Insert 문법

INSERT ALL
      INTO sales (prod_id, cust_id, time_id, amount)
      VALUES (product_id, customer_id, weekly_start_date, sales_sun)
      INTO sales (prod_id, cust_id, time_id, amount)
      VALUES (product_id, customer_id, weekly_start_date+1, sales_mon)
      INTO sales (prod_id, cust_id, time_id, amount)
      VALUES (product_id, customer_id, weekly_start_date+2, sales_tue)
      INTO sales (prod_id, cust_id, time_id, amount)
      VALUES (product_id, customer_id, weekly_start_date+3, sales_wed)
      INTO sales (prod_id, cust_id, time_id, amount)
      VALUES (product_id, customer_id, weekly_start_date+4, sales_thu)
      INTO sales (prod_id, cust_id, time_id, amount)
      VALUES (product_id, customer_id, weekly_start_date+5, sales_fri)
      INTO sales (prod_id, cust_id, time_id, amount)
      VALUES (product_id, customer_id, weekly_start_date+6, sales_sat)
   SELECT product_id, customer_id, weekly_start_date, sales_sun,
      sales_mon, sales_tue, sales_wed, sales_thu, sales_fri, sales_sat
      FROM sales_input_table;

 

조건 절 다중 Insert 문

INSERT ALL
   WHEN order_total <= 100000 THEN
      INTO small_orders
   WHEN order_total > 1000000 AND order_total <= 200000 THEN
      INTO medium_orders
   WHEN order_total > 200000 THEN
      INTO large_orders
   SELECT order_id, order_total, sales_rep_id, customer_id
      FROM orders;

 

LONG 컬럼 타입 LOB 타입 변환

INSERT INTO lob_tab 
   SELECT pic_id, TO_LOB(long_pics) FROM long_tab;

 

시퀀스 사용 문법

INSERT INTO departments 
   VALUES  (departments_seq.nextval, 'Entertainment', 162, 1400);

 

힌트

append, parallel 사용 가능

반응형

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

댓글