반응형
오라클 입력 문법인 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 사용 가능
반응형
'IT > SQLP' 카테고리의 다른 글
[Oracle]오라클 실행계획 보는 법, SQL 튜닝 기초 (2) | 2022.06.23 |
---|---|
[SQLD / SQLP] 기출문제 질문 모음2 (0) | 2022.05.24 |
[SQLD] 기출문제 질문 모음 (0) | 2022.05.23 |
[SQL 기초강의] 7강. Group by, HAVING, ROLLUP, CUBE, GROUPING SETS (0) | 2022.05.04 |
[SQL 기초강의] 6강. 데이터 형변환 (0) | 2022.05.03 |
댓글