以scott使用者下的emp,dept等幾張表作為示範,sqlplus示範。
首先建立兩張空e1, e2:
SQL> create table e1 as select ename, sal, hiredate from emp where 1=2;
表已建立。
SQL> create table e2 as select ename, deptno, mgr from emp where 1=2;
表已建立。
oracle向表裡插入資料有很多種方法
1. insert into xxx values(xxx);
SQL> insert into e1 values('test', 2000, to_date('20111111','yyyyMMdd'));
已建立 1 行。
2. insert into xxx select xxx from xxx;
SQL> insert into e1 select ename, sal, hiredate from emp;
已建立14行。
3. 進階inert語句:将一個查詢語句的結果插入到多張表中。
1). insert all
SQL> insert all
2 into e1 values(ename, sal, hiredate)
3 into e2 values(ename, deptno, mgr)
4 select * from emp;
已建立28行。
即将查詢結果的每一行都插入到e1,e2表中。select * from emp 一共14行資料,是以共插入28行。
2). insert first
SQL> insert first
2 when sal > 2500 then
3 into e1 values(ename, sal, hiredate)
4 when sal >1000 then
5 into e2 values(ename, deptno, mgr)
6 select * from emp;
已建立12行。
查詢結果的一行隻能插入到一張表,即使兩張表的條件都符合。寫在前面的條件優先插入...可以繼續測試一下:
SQL> delete from e1;
已删除5行。
SQL> delete from e2;
已删除7行。
SQL> insert first
2 when sal > 1000 then
3 into e1 values(ename, sal, hiredate)
4 when sal > 2000 then
5 into e2 values(ename, deptno, mgr)
6 select * from emp;
已建立12行。
SQL> select count(1) from e1;
COUNT(1)
----------
12
SQL> select count(1) from e2;
COUNT(1)
----------
0
可以看到,e2表中沒有插入任何行,因為滿足第二個條件的行都滿足第一條件,是以都插入到e1中了。是以需要在書寫條件的時候注意了...
OK~結束~