ITPub博客

首页 > 数据库 > Oracle > insert all 和insert first

insert all 和insert first

原创 Oracle 作者:syzxlyx 时间:2009-02-03 13:30:41 0 删除 编辑
Insert…Select

使用Insert Select实现同时向多个表插入记录

一、无条件 INSERT ALL
-------------------------------------------------------------------------INSERT ALL

insert_into_clause values_clause_1
[insert_into_clause values_clause_2] ……

Subquery;
-------------------------------------------------------------------------- 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;--------------------------------------------------------------------------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;--------------------------------------------------------------------------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才会起作用。
[@more@]

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

下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2008-03-01

  • 博文量
    2
  • 访问量
    47892