ORACLE INSERT ALL 用法
1INSERT ALL
1.1句法
multi_table_insert :: =

conditional_insert_clause :: =

1.2multi_table_insert
在多表插入中,将从子查询求值返回的行派生的计算行插入到一个或多个表中。
表别名不是由子查询的选择列表定义的。因此,它们在依赖于选择列表的子句中不可见。例如,尝试引用表达式中的对象列时可能会发生这种情况。要使用带有表别名的表达式,必须将表达式放入带有列别名的选择列表中,然后引用多表插入的VALUES子句或WHEN条件中的列别名。
ALL into_clause
指定ALL后跟多个insert_into_clauses以执行无条件多表插入。Oracle数据库对子insert_into_clause查询返回的每一行执行一次。
1.3conditional_insert_clause
指定conditional_insert_clause执行条件多表插入。Oracle数据库insert_into_clause通过相应的WHEN条件过滤每个条件,这决定了是否insert_into_clause执行了该条件。WHEN条件中的每个表达式都必须引用子查询的选择列表返回的列。单个多表插入语句最多可包含127个WHEN子句。
ALL
如果指定ALL默认值,则数据库将评估每个WHEN子句,而不管任何其他WHEN子句的评估结果如何。对于WHEN条件求值为true的每个子句,数据库执行相应的INTO子句列表。
FIRST
如果指定FIRST,则数据库WHEN按照它在语句中出现的顺序计算每个子句。对于WHEN计算结果为true 的第一个子句,数据库将执行相应的INTO子句并跳过WHEN给定行的后续子句。
ELSE 说明
对于给定的行,如果没有WHEN子句的计算结果为true,则:
- 如果已指定ELSE子句,则数据库将执行与INTO子句关联的子句列表ELSE。
- 如果未指定else子句,则数据库不对该行执行任何操作。
1.4多表插入的限制
多表插入符合以下限制:
- 您只能在表上执行多表插入,而不能在视图或物化视图上执行。
- 您无法在远程表中执行多表插入。
- TABLE执行多表插入时,无法指定集合表达式。
- 如果任何目标表是索引组织的,或者任何目标表上定义了位图索引,则不会并行化多表插入。
- 多表插入语句不支持计划稳定性。
- 您不能在多表插入语句的任何部分中指定序列。多表插入被视为单个SQL语句。因此,第一个引用NEXTVAL生成下一个数字,并且语句中的所有后续引用返回相同的数字。
1.5多表插入:示例
1.5.1INSERT ALL 无条件
以下示例使用多表格插入语法将sh.sales来自具有不同结构的输入表的一些数据插入到示例表中。
SELECT * FROM sales_input_table;
PRODUCT_ID CUSTOMER_ID WEEKLY_ST SALES_SUN SALES_MON SALES_TUE SALES_WED SALES_THU SALES_FRI SALES_SAT
---------- ----------- --------- ---------- ---------- ---------- ----
111 222 01-OCT-00 100 200 300 400 500 600 700
222 333 08-OCT-00 200 300 400 500 600 700 800
333 444 15-OCT-00 300 400 500 600 700 800 900
INSERT ALL
INTO sales (prod_id, cust_id, time_id, amount)
VALUES (product_id, customer_id, weekly_start_date, sales_sun)
INTO sales (prod_id, cust_id, time_id, amount)
VALUES (product_id, customer_id, weekly_start_date+1, sales_mon)
INTO sales (prod_id, cust_id, time_id, amount)
VALUES (product_id, customer_id, weekly_start_date+2, sales_tue)
INTO sales (prod_id, cust_id, time_id, amount)
VALUES (product_id, customer_id, weekly_start_date+3, sales_wed)
INTO sales (prod_id, cust_id, time_id, amount)
VALUES (product_id, customer_id, weekly_start_date+4, sales_thu)
INTO sales (prod_id, cust_id, time_id, amount)
VALUES (product_id, customer_id, weekly_start_date+5, sales_fri)
INTO sales (prod_id, cust_id, time_id, amount)
VALUES (product_id, customer_id, weekly_start_date+6, sales_sat)
SELECT product_id, customer_id, weekly_start_date, sales_sun,
sales_mon, sales_tue, sales_wed, sales_thu, sales_fri, sales_sat
FROM sales_input_table;
SELECT * FROM sales
ORDER BY prod_id, cust_id, time_id;
PROD_ID CUST_ID TIME_ID CPROMO_ID QUANTITY_SOLD AMOUNT COST
---------- ---------- --------- - ---------- ------------- ---------- ----------
111 222 01-OCT-00 100
111 222 02-OCT-00 200
111 222 03-OCT-00 300
111 222 04-OCT-00 400
111 222 05-OCT-00 500
111 222 06-OCT-00 600
111 222 07-OCT-00 700
222 333 08-OCT-00 200
222 333 09-OCT-00 300
222 333 10-OCT-00 400
222 333 11-OCT-00 500
222 333 12-OCT-00 600
222 333 13-OCT-00 700
222 333 14-OCT-00 800
333 444 15-OCT-00 300
333444 16-OCT-00 400
333 444 17-OCT-00 500
333 444 18-OCT-00 600
333 444 19-OCT-00 700
333 444 20-OCT-00 800
333 444 21-OCT-00 900
1.5.2INSERT ALL 带条件
环境建立:
Create table T_TAR1 (ID NUMBER ,NAME VARCHAR2(30), TYPE VARCHAR2(19));
Create table T_TAR2 (ID NUMBER ,NAME VARCHAR2(30), TYPE VARCHAR2(19));
目标:从DBA_OBJECTS 对象获取OBJECT_ID,OBJECT_NAME 和OBJECT_TYPE插入到T_TAR1表并且将DBA_OBJECTS对象中TYPE类型为TABLE 或VIEW的插入到T_TAR2表
Set timing on
Set linesize 160
alter system flush buffer_cache;
alter system flush shared_pool;
truncate table T_TAR1;
truncate table T_TAR2;
SYS@test> INSERT ALL
WHEN 1=1 THEN
INTO T_TAR1
WHEN OBJECT_TYPE='TABLE' or OBJECT_TYPE='VIEW'THEN
INTO T_TAR2
select OBJECT_ID,OBJECT_NAME,OBJECT_TYPE FROM DBA_OBJECTS;
82538 rows created.
Commit complete.
Elapsed: 00:00:00.71
<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">
ORACLE INSERT ALL 用法的更多相关文章
- Oracle insert all用法简介
insert all是oracle中用于批量写数据的 现在直接通过例子学习一下,比较简单直观,例子来自<收获,不止SQL优化>一书 环境准备 create table t as selec ...
- Oracle笔记-Multitable INSERT 的用法
[转自] http://blog.chinaunix.net/uid-8504518-id-3310531.html 为避免日趋衰退的记忆力,参考官方E文文档<Introduction to ...
- [转]ORACLE的ProC用法讲解
pro*c是高级的用法,OCI是oracle的基础用法 如何编译.pc文件: proc code=cpp parse=none iname=filename.pc oname=filename.cp ...
- 【转】关于oracle with as用法
原文链接:关于oracle with as用法 with as语法–针对一个别名with tmp as (select * from tb_name) –针对多个别名with tmp as (se ...
- ORACLE 中ROWNUM用法总结(转)
ORACLE 中ROWNUM用法总结! 对于 Oracle 的 rownum 问题,很多资料都说不支持>,>=,=,between...and,只能用以上符号(<.<=.!=) ...
- ORACLE 中ROWNUM用法总结!
ORACLE 中ROWNUM用法总结! 对于 Oracle 的 rownum 问题,很多资料都说不支持>,>=,=,between...and,只能用以上符号(<.<=.!=) ...
- Oracle CASE WHEN 用法介绍[Z]
Oracle CASE WHEN 用法介绍 1. CASE WHEN 表达式有两种形式 --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ...
- 转:ORACLE 中ROWNUM用法总结!
oracle 分页查询语句:select * from (select u.*,rownum r from (select * from userifno) u where rownum<大值) ...
- oracle expdp/impdp 用法详解
http://hi.baidu.com/hzfsai/item/4a4b3fc4b1cf7e51ad00efbd oracle expdp/impdp 用法详解 Data Pump 反映了整个导出/导 ...
随机推荐
- 【转载】redis优化配置和redis.conf说明
转载地址:http://blog.csdn.net/luozhonghua2014/article/details/40568707?utm_source=tuicool&utm_medium ...
- React Native开发环境的搭建
我只能说搭建开发环境还是不能相信网上纷乱的博客,还是中文网靠谱. http://reactnative.cn/docs/0.47/getting-started.html 纯粹只是为了记录一下.
- 编写高质量代码改善C#程序的157个建议——建议114:MD5不再安全
建议114:MD5不再安全 MD5不再安全不是就算法本身而言的.如果从可逆性的角度出发,MD5值不存在被破解的可能性. MD5被广泛应用于密码验证和消息完整性验证.假设新注册一个用户,当注册用户的密码 ...
- 常见的MIME
"css": "text/css", "gif": "image/gif", "html": &qu ...
- MySQL中如何为查询的数据添加自增序号、顺序呢?
背景介绍 很多时候我们在使用mysql查询数据的时候都会遇到一个问题,就是查询出来了一堆数据,但是查询的数据的表并没有序号,然而部分数据库显示工具是有外带序号显示,但是这种序号不是由sql产生的,而是 ...
- 楊輝三角C#版
class Program { static void Main(string[] args) { Console.WriteLine("please input a number:&quo ...
- WebSerervice webapi使用
WebSerervice webapi使用 1.传json参数: 2.返回json数据: 3.权限控制: Authorize特性:必须经过认证,请求头必须具有token信息 4.路由: 5.过滤器: ...
- 网易对象存储NOS图床神器
本文来自网易云社区 注:使用过程中有什么问题或建议欢迎到如下链接提交:http://note.youdao.com/noteshare?id=6321086fa4d7a6c003656354c1aa6 ...
- WDF(Windows Driver Frameworks)驱动框架源码!!
微软官方提供源码:https://github.com/Microsoft/Windows-Driver-Frameworks
- OCP换题库了,052新加的考题及答案整理-第16题
16.Your database Is configured In archivelog mode. The USERS01 tablespace Is currently online. You a ...