ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 多表插入

多表插入

原创 Linux操作系统 作者:hjianping 时间:2011-04-26 19:53:35 0 删除 编辑

一、无条件insert all
insert all
 insert_into_clause values_clause_1
 insert_into_clause values_clause_2
 ……
subquery;

sql> insert all
 into z_test1(id,name) values (id,name)
 into z_test2(id) values(id)
select id,name from z_test;

1、指定所有跟随着的多表insert_into_clauses执行无条件的多表插入
2、对于每个由子查询返回的行,oracle 服务器执行每一个 insert_into_clause一次。


二、条件insert all
insert all
 when condition then insert_into_clause values_clause
 when condition then insert_into_clause values_clause
 ……
 else insert_into_clause values_clause
subquery;

sql> insert all
 when id>5 then into z_test1(id, name) values(id,name)
 when id<>2 then into z_test2(id) values(id)
 else into z_test3 values(name)
select id,name from z_test;

1、指定conditional_insert_clause来执行一个条件多表插入
2、oracle服务器通过相应的when条件过滤每一个insert_into_clause,确定是否执行这个 
insert_into_clause
3、一个单个的多表插入语句可以包含最多127个when子句。


三、条件insert first
insert first
 when condition then insert_into_clause values_clause
 when condition then insert_into_clause values_clause
 ……
 else insert_into_clause values_clause
subquery;

sql> insert first
 when id=1 then into z_test1 values(id,name)
 when id>5 then into z_test2 values(id)
 else into z_test3 values(name)
select * from z_test;

1、oracle服务器对每一个出现在语句顺序中的when子句求值;
2、如果第一个when子句的值为true,oracle服务器对于给定的行执行相应的into子句,并且跳过后
面的when子句(后面的when语句都不再考虑满足第一个when子句的记录,即使该记录满足when语句中的
条件)。


注:多表insert语句上的约束
a、你只能在表而不能在视图上执行多表插入;
b、你不能执行一个多表插入到一个远程表;
c、在执行一个多表插入时,你不能指定一个表集合表达式;
d、在一个多表插入中,所有的insert_into_clauses不能组合指定多于999个目列;
e、只有当所有insert_into_clauses中的表数据都没有发生更新时,rollback才会起作用。

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17012874/viewspace-693806/,如需转载,请注明出处,否则将追究法律责任。

上一篇: merge into
下一篇: dbms_lock.sleep
请登录后发表评论 登录
全部评论

注册时间:2011-04-24

  • 博文量
    80
  • 访问量
    75413