Oracle的多表插入语句

57 篇文章 0 订阅
56 篇文章 0 订阅

转载自:http://wallimn.iteye.com/blog/1168994

Oracle Insert all有三种情况: 
一、无条件 INSERT ALL 
二、条件 INSERT ALL 
三、条件 INSERT FIRST 
Insert…Select 
使用Insert Select实现同时向多个表插入记录 
2007/06/25 
一、无条件 INSERT ALL 
--------------------------------------------------------------------------------------------- 
INSERT ALL 
insert_into_clause values_clause_1 
[insert_into_clause values_clause_2] 
…… 
Subquery; 
   示例: 
INSERT ALL 
INTO sal_history(emp_id,hire_date,salary) values (empid,hiredate,sal) 
INTO mgr_history(emp_id,manager_id,salary) values (empid,hiredate,sal) 
SELECT employee_id empid,hire_date hiredate,salary sal,manager_id mgr 
FROM employees 
WHERE employee_id>200; 

---------------------------------------------------------------------------------------------- 
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; 
   示例: 
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; 
-------------------------------------------------------------------------------------------- 
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才会起作用。 

--枢轴式(Pivoting) INSERT 
--主要用于将非关系数据转换为关系型数据(把原来横表,转为竖表) 
sales_source_data的格式如下: 
empno,week_id,sales_MON,sales_TUE,sales_WED,sales_THUR,sales_FRI 

INSERT ALL 
INTO sales_info VALUES (employee_id,week_id,sales_MON) 
INTO sales_info VALUES (employee_id,week_id,sales_TUE) 
INTO sales_info VALUES (employee_id,week_id,sales_WED) 
INTO sales_info VALUES (employee_id,week_id,sales_THUR) 
INTO sales_info VALUES (employee_id,week_id,sales_FRI) 
SELECT EMPLOYEE_ID, week_id, sales_MON, sales_TUE, sales_WED, sales_THUR,sales_FRI 
FROM   sales_source_data;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值