○ DML 확장
inline view : from 에 있는 subquery
1) Explicit Default
create table t1 (no number, loc varchar2(10) default 'SEOUL');
1. insert into t1 values(100);
-> ORA-00947 : not enough values
: 컬럼이 두개인데 하나의 컬럼에만 값이 들어갔기 때문에 error
2. Implicit Default
insert into t1(no) values(100);
3. Explicit Default
insert into t1(no loc) values(100, default);
-> 2,3번 둘다 같은 값이 들어가지만 구문을 보고 이해 할 수 있도록 해야 하므로 Explicit Default를 사용하는 것이 좋다.
2) Multitable INSERT
1. 정의
① table을 읽는 시간이 줄어든다.
② 1번의 DML로 여러 row를 insert할 수 있다.
2. Multitable Insert 방법
① Unconditional INSERT ALL
② Conditional ALL INSERT
③ Conditional FIRST INSERT
④ Pivoting INSERT
3. Unconditional INSERT ALL
① 컬럼을 선별적으로 골라서 넣을 수 있다.
② 검색한 table의 컬럼의 수와 넣으려는 table의 컬럼의 수가 달라도 상관 없다.
③ example
create table emp1(empno, hiredate, sal); INSERT ALL |
4. Conditional INSERT ALL
① 조건을 넣어 insert 한다.
② example
INSERT ALL : when에 맞는사원이면 into하는데, 두개의 table에 다 들어갈수 있다. |
5. Conditional INSERT FIRST
① subquery 결과를 이용하여 조건을 검사하고 값을 넣는다.
② 첫번째 when절이 true면 나머지 when절은 검사하지 않는다.
③ example
iNSERT FIRST WHEN sal>=3000 THEN iNTO emp1 VALUES (empno, ename, job, mgr, hiredate, sal, comm, deptno) WHEN job = 'MANAGER' THEN INTO emp2 VALUES (empno, ename, job, mgr, hiredate, sal, comm, deptno) SELECT * FROM emp; |
6. Pivoting INSERT
① 같은 table의 다른 컬럼에 같은 값을 넣는다.
② example
INSERT ALL INTO emp1 VALUES (empno, ename) SELECT * : select 값을 emp1테이블 row에 하나씩 넣는다. |
3) Merge
: table을 병합 시킨다.
create table t_master as select * from emp where rownum <= 8; create table t_tx as select * from emp; update t_tx set sal = sal+1000, comm = comm+100 select * from t_master; prompt Before Merge MERGE INTO t_master m : t_master table과 t_tx table을 empno로 join한 뒤 일치하는 값이 있으면 prompt After Merge : Merge 한 후의 t_master |