desc emp insert into emp values (1,'Tom','CLERK',7698,to_date('yyyy-mm-dd','2016-08-25'),1450,null,30);
对指定的列赋值
insert into emp (empno,ename) values (2,'Jerry');
sql脚本inst.sql
insert into dept values (&deptno,upper('&dname'),upper('&loc'));
2. 子查询拷贝行
emp表中有奖金的员工存放在新创建的表bonus中 insert into bonus select ENAME,JOB,SAL,COMM from emp where comm>0;
3. 修改表中数据
smith工资涨百分之10 update emp set sal=sal*1.1where ename='SMITH';
4. 向虚拟表中插入行
insert into (select empno,ename,deptno from emp where deptno=10) values (2,'Alvin',20);
通过sql脚本来执行`ins10.sql`
```sql insert into (select*from emp where deptno=10withcheck option) values (&empno,'&ename','&job',&mgr,'&hiredate',&sal,&comm,&deptno);
5. with check option 选项
设置withcheck option选项 SQL>insert into (select*from emp where deptno=10withcheck option) values (901,'booboo2','dba',7782,sysdate,7000,8000,10);
1row created.
SQL>select*from emp where deptno=10; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 900 booboo dba 778231-JUL-177000800010 901 booboo2 dba 778231-JUL-177000800010 7782 CLARK MANAGER 783909-JUN-81245010 7839 KING PRESIDENT 17-NOV-81500010 7934 MILLER CLERK 778223-JAN-82130010
SQL>insert into (select*from emp where deptno=10withcheck option) values (901,'booboo2','dba',7782,sysdate,7000,8000,20); insert into (select*from emp where deptno=10withcheck option) values (901,'booboo2','dba',7782,sysdate,7000,8000,20) * ERROR at line 1: ORA-01402: viewWITHCHECK OPTION where-clause violation
create table copy_emp asselect*from emp where deptno=10;
matched–> 目标表中的主键值在数据源中被找到
not matched –> 数据源中主键在目标表中不存在
mergeinto copy_emp c using emp e on (c.empno=e.empno) when matched then updateset c.ename=e.ename, c.job=e.job, c.mgr=e.mgr, c.hiredate=e.hiredate, c.sal=e.sal, c.comm=e.comm, c.deptno=e.deptno whennot matched then insertvalues (e.empno, e.ename, e.job, e.mgr, e.hiredate, e.sal, e.comm, e.deptno);
操作记录
SQL>create table copy_emp asselect*from emp where deptno=10;
Table created.
SQL>mergeinto copy_emp c 2using emp e 3on (c.empno=e.empno) when matched then updateset c.ename=e.ename, c.job=e.job, c.mgr=e.mgr, c.hiredate=e.hiredate, c.sal=e.sal, c.comm=e.comm, c.deptno=e.deptno whennot matched then insertvalues (e.empno, e.ename, e.job, e.mgr, e.hiredate, e.sal, e.comm, 22 e.deptno);
16rows merged.
SQL>select*from copy_emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 900 booboo dba 778231-JUL-177000800010 901 booboo2 dba 778231-JUL-177000800010 7782 CLARK MANAGER 783909-JUN-81245010 7839 KING PRESIDENT 17-NOV-81500010 7934 MILLER CLERK 778223-JAN-82130010 7844 TURNER SALESMAN 769808-SEP-811500030 7521 WARD SALESMAN 769822-FEB-81125050030 7654 MARTIN SALESMAN 769828-SEP-811250140030 7788 SCOTT ANALYST 756619-APR-87300020 7698 BLAKE MANAGER 783901-MAY-81285030 7566 JONES MANAGER 783902-APR-81297520 7499 ALLEN SALESMAN 769820-FEB-81160030030 7902 FORD ANALYST 756603-DEC-81300020 7369 SMITH CLERK 790217-DEC-8080020 7876 ADAMS CLERK 778823-MAY-87110020 7900 JAMES CLERK 769803-DEC-8195030
16rows selected.
源表进行了修改
SQL>insert into emp (empno,ename,sal) values (1,'Alvin',1400);
1row created.
SQL>update emp set sal=1111where empno=7788;
1row updated.
目标表与源表不一致了
SQL>select*from copy_emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 900 booboo dba 778231-JUL-177000800010 901 booboo2 dba 778231-JUL-177000800010 7782 CLARK MANAGER 783909-JUN-81245010 7839 KING PRESIDENT 17-NOV-81500010 7934 MILLER CLERK 778223-JAN-82130010 7844 TURNER SALESMAN 769808-SEP-811500030 7521 WARD SALESMAN 769822-FEB-81125050030 7654 MARTIN SALESMAN 769828-SEP-811250140030 7788 SCOTT ANALYST 756619-APR-87300020 7698 BLAKE MANAGER 783901-MAY-81285030 7566 JONES MANAGER 783902-APR-81297520 7499 ALLEN SALESMAN 769820-FEB-81160030030 7902 FORD ANALYST 756603-DEC-81300020 7369 SMITH CLERK 790217-DEC-8080020 7876 ADAMS CLERK 778823-MAY-87110020 7900 JAMES CLERK 769803-DEC-8195030
16rows selected.
SQL>select*from emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 900 booboo dba 778231-JUL-177000800010 901 booboo2 dba 778231-JUL-177000800010 1 Alvin 1400 7369 SMITH CLERK 790217-DEC-8080020 7499 ALLEN SALESMAN 769820-FEB-81160030030 7521 WARD SALESMAN 769822-FEB-81125050030 7566 JONES MANAGER 783902-APR-81297520 7654 MARTIN SALESMAN 769828-SEP-811250140030 7698 BLAKE MANAGER 783901-MAY-81285030 7782 CLARK MANAGER 783909-JUN-81245010 7788 SCOTT ANALYST 756619-APR-87111120 7839 KING PRESIDENT 17-NOV-81500010 7844 TURNER SALESMAN 769808-SEP-811500030 7876 ADAMS CLERK 778823-MAY-87110020 7900 JAMES CLERK 769803-DEC-8195030 7902 FORD ANALYST 756603-DEC-81300020 7934 MILLER CLERK 778223-JAN-82130010
17rows selected.
再次合并
mergeinto copy_emp c using emp e on (c.empno=e.empno) when matched then updateset c.ename=e.ename, c.job=e.job, c.mgr=e.mgr, c.hiredate=e.hiredate, c.sal=e.sal, c.comm=e.comm, c.deptno=e.deptno whennot matched then insertvalues (e.empno, e.ename, e.job, e.mgr, e.hiredate, e.sal, e.comm, e.deptno);
17rows merged.
合并后与源表一致
SQL>select*from copy_emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 900 booboo dba 778231-JUL-177000800010 901 booboo2 dba 778231-JUL-177000800010 7782 CLARK MANAGER 783909-JUN-81245010 7839 KING PRESIDENT 17-NOV-81500010 7934 MILLER CLERK 778223-JAN-82130010 7844 TURNER SALESMAN 769808-SEP-811500030 7521 WARD SALESMAN 769822-FEB-81125050030 7654 MARTIN SALESMAN 769828-SEP-811250140030 7788 SCOTT ANALYST 756619-APR-87111120 7698 BLAKE MANAGER 783901-MAY-81285030 7566 JONES MANAGER 783902-APR-81297520 7499 ALLEN SALESMAN 769820-FEB-81160030030 7902 FORD ANALYST 756603-DEC-81300020 7369 SMITH CLERK 790217-DEC-8080020 7876 ADAMS CLERK 778823-MAY-87110020 7900 JAMES CLERK 769803-DEC-8195030 1 Alvin 1400
17rows selected.
这是数据仓库的一些用法
修改目标表后再此合并
SQL>update copy_emp set sal=1499where empno=1;
1row updated.
SQL>select*from emp where empno=1;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 1 Alvin 1400
SQL>select*from copy_emp where empno=1;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 1 Alvin 1499
mergeinto copy_emp c using emp e on (c.empno=e.empno) when matched then updateset c.ename=e.ename, c.job=e.job, c.mgr=e.mgr, c.hiredate=e.hiredate, c.sal=e.sal, c.comm=e.comm, c.deptno=e.deptno whennot matched then insertvalues (e.empno, e.ename, e.job, e.mgr, e.hiredate, e.sal, e.comm, e.deptno);
17rows merged.
SQL>select*from emp where empno=1;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 1 Alvin 1400
SQL>select*from copy_emp where empno=1;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 1 Alvin 1400