Oracle的多表插入
来源:互联网 发布:vscode golang 编译 编辑:程序博客网 时间:2024/05/29 16:42
以前只知道INSERT语句可以在表中插入一行数据,近期了解到关于多表插入的知识,在此记录下来,用以备忘。
一、多表插入的类型:
1、unconditional insert cause
无条件的多表插入,Oracle将会把子查询返回的每一条记录插入到对应的表中。
语法如下:
INSERT ALL
INTO tablename1 values(column1,column2,...)
INTO tablename2 values(column1,column2,...)
subquery;
2、conditional insert cause
有条件的多表插入又可以分为INSETR ALL和INSERT FIRST。Oracle会根据WHEN后的条件过滤插入子句,只有符合条件方可被插入到对应的表中。在带有条件的多表插入语句中最多可以有127个WHEN子句;
语法如下:
INSERT ALL / FIRST
WHEN condition THEN
INTO tablename1 values(column1,column2,...)
WHEN condition THEN
INTO tablename2 values(column1,column2,...)
ELSE
INTO tablename3 values(column1,column2,...)
subquery;
二、INSERT ALL和INSERT FIRST的比较:
1、INSERT ALL
在INSERT ALL语句中,Oracle计算WHEN子句后面的条件,只要条件为true,则插入记录到相应的表当中;
2、INSERT FIRST
在INSERT FIRST语句中,Oracle依次计算WHEN子句后面的条件,如果第一个WHEN子句的条件为true,则跳过后面的WHEN子句;(也就是说,已经插入到一个表中的记录,不会再插入到其他的表中去了)
根据上面的分析可以这样理解,在INSERT FIRST语句中记录的插入与INTO子句在整个语句中的顺序有关。
三、实验
创建两个测试表test_t1和test_t2:
SQL> create table test_t1 (x int primary key,y int);
Table created.
SQL> create table test_t2 (x int primary key,y date);
Table created.
1、执行无条件多表插入:
SQL> insert all
2 into test_t1 values (rownum,object_id)
3 into test_t2 values (rownum,created)
4 select rownum,object_id,created from all_objects where rownum<11;
20 rows created.
SQL> select * from test_t1;
X Y
---------- ----------
1 258
2 259
3 311
4 313
5 314
6 316
7 317
8 319
9 606
10 887
10 rows selected.
SQL> select * from test_t2;
X Y
---------- ---------
1 12-MAR-08
2 12-MAR-08
3 12-MAR-08
4 12-MAR-08
5 12-MAR-08
6 12-MAR-08
7 12-MAR-08
8 12-MAR-08
9 12-MAR-08
10 12-MAR-08
10 rows selected.
2、执行有条件的INSERT ALL多表插入:
SQL> insert all
2 when rownum<7 then
3 into test_t1 values (rownum,object_id)
4 when rownum>5 then
5 into test_t2 values (rownum,created)
6 select rownum,object_id,created from all_objects where rownum<11;
11 rows created.
SQL> select * from test_t1;
X Y
---------- ----------
1 258
2 259
3 311
4 313
5 314
6 316
6 rows selected.
SQL> select * from test_t2;
X Y
---------- ---------
6 12-MAR-08
7 12-MAR-08
8 12-MAR-08
9 12-MAR-08
10 12-MAR-08
5 rows selected.
注意:在这里,rownum为6的记录被插入到两个表当中了。
3、执行有条件的INSERT FIRST多表插入:
SQL> insert first
2 when rownum<7 then
3 into test_t1 values (rownum,object_id)
4 when rownum>5 then
5 into test_t2 values (rownum,created)
6 select rownum,object_id,created from all_objects where rownum<11;
10 rows created.
SQL> select * from test_t1;
X Y
---------- ----------
1 258
2 259
3 311
4 313
5 314
6 316
6 rows selected.
SQL> select* from test_t2;
X Y
---------- ---------
7 12-MAR-08
8 12-MAR-08
9 12-MAR-08
10 12-MAR-08
4 rows selected.
注意:在这里,rownum为6的记录没有被插入到第二个表当中。
英文实在是很烂,官方文档看的很辛苦,暂且就记录这些... ...
- oracle的多表插入
- oracle的多表插入
- Oracle的多表插入
- 简单的多表插入(oracle)
- oracle多表插入
- Oracle多表插入
- oracle 多表插入
- oracle 多表插入
- oracle多表插入
- Oracle多表插入
- oracle多表插入
- oracle select表插入,多行插入
- oracle的多行插入
- oracle的多表关联更新或者插入
- Oracle多表插入insert all/insert first的区别
- Oracle 插入多条记录的sql
- oracle插入多条语句(转载的)
- Oracle插入表中不存在的记录
- Notification 的开发指南
- COJ 1328 大数乘法(包括负数的)
- JAVA解析JSON数据
- 再谈异构计算CPU+GPU
- win memcached总结
- Oracle的多表插入
- 容器使用的12条军规——《Effective+STL中文版》试读
- 详细讲解Quartz.NET
- 各环节的格式风格上的好功夫好说的过分过分五个发达了恐惧
- pthread_cond_signal和pthread_cond_wait简介
- xml解析中如何将接口返回的13位time转化为正常的时间
- 前缀判断
- spring-datasource-placeholder
- c语言中static 用法总结