[Oracle] Insert All神奇
无条件插入
Oracle中间insert all它指的是相同的数据组成不同的表。如果有需求现在:该t插入数据表t1,t2,假设你不知道insert all。您可以使用insert插入2次要,例如,见下文:
- insert into t1(object_name,object_id) select * from t;
- insert into t2(object_name,object_id) select * from t;
- commit;
其实。以上这样的写法是错误的,由于在两次insert的过程中,t表的数据有可能已经发生了变化,也就是说。t1,t2表得到的数据有可能不一样。正确的写法应该是採用insert all:
- insert all
- into t1(object_name,object_id)
- into t2(object_name,object_id)
- select * from t;
- commit;
有条件的插入
两者差别:
insert first:对于每一行数据,仅仅插入到第一个when条件成立的表,不继续检查其它条件。
insert all : 对于每一行数据,对每个when条件都进行检查。假设满足条件就运行插入操作。
看以下的样例:
- --insert first
- --前面等于1的条件被<=5含在内,FIRST就表示前面插入了。后面不会再插入了。
- insert first
- when object_id = 1 then
- into t1(object_name,object_id)
- when object_id <=5 then
- into t2(object_name,object_id)
- select * from t;
- commit;
- select * from t1;
- OBJECT_NAME OBJECT_ID
- --------------------------------- ---
- ICOL$ 1
- select * from t2;
- OBJECT_NAME OBJECT_ID
- --------------------------------- ---
- I_USER1 2
- CON$ 3
- UNDO$ 4
- C_COBJ# 5
- --insert all
- insert all
- when object_id = 1 then
- into t1(object_name,object_id)
- when object_id <=5 then
- into t2(object_name,object_id)
- select * from t;
- commit;
- SQL> select * from t1;
- OBJECT_NAME OBJECT_ID
- --------------------------------- ---
- ICOL$ 1
- SQL> select * from t2;
- OBJECT_NAME OBJECT_ID
- --------------------------------- ---
- ICOL$ 1
- I_USER1 2
- CON$ 3
- UNDO$ 4
- C_COBJ# 5
行转列插入
- select * from sales_source_data;
- EMPLOYEE_ID WEEK_ID SALES_MON SALES_TUE SALES_WED SALES_THUR SALES_FRI
- ----------- ---------- ---------- ---------- ---------- ---------- ----------
- 176 6 2000 3000 4000 5000 6000
- 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;
- select * from sales_info;
- EMPLOYEE_ID WEEK SALES
- ----------- ---------- ----------
- 176 6 2000
- 176 6 3000
- 176 6 4000
- 176 6 5000
- 176 6 6000
多表插入语句的限制条件
1. 仅仅能对表运行多表插入语句,不能对视图或物化视图运行;
2. 不能对远端表运行多表插入语句。
3. 不能使用表集合表达式。
4. 不能超过999个目标列;
5. 在RAC环境中或目标表是索引组织表或目标表上建有BITMAP索引时。多表插入语句不能并行运行;
6. 多表插入语句不支持运行计划稳定性;
7. 多表插入语句不能在子查询序列被用于。
版权声明:本文博客原创文章,博客,未经同意,不得转载。
[Oracle] Insert All神奇的更多相关文章
- Oracle INSERT ALL 语句介绍
描述 Oracle INSERT ALL 语句用来用一个 INSERT 语句添加多行.该行可以只使用一个SQL命令插入到一个表或多个表. 语法 Oracle INSERT ALL 语法如下: INSE ...
- oracle Insert 一次插入多条记录
oracle Insert 一次插入多条记录有两种方法: 1)Insert All Into table_name values ... insert all into table_name valu ...
- Oracle Insert 多行(转)
1.一般的insert 操作. 使用语法insert into table_name[(column[,column...])] values (value[,value…])的insert语句,每条 ...
- oracle insert &字符插入问题
例如执行一下语句: insert into NSRXT_SP (SP_ID, SP_TITLE, SP_DESC, SP_URL, SP_TYPE, SP_SUB_TYPE, ADD_TIME, CZ ...
- C# Oracle insert 中文乱码
问题描述: 在PL SQL中insert 中文数据,显示不乱码,通过后台insert的中文数据,显示问号. 解决分三步: 1.Select userenv('language') from dual; ...
- oracle insert into 插入多组数据方法总结
网上好多oracle 的文章,多是以oracle开头,内容确实其他sql,一幅气死人不偿命的嘴脸着实让人难受. 今天就更新点oracle 使用insert into插入数据的方式: 1.oracle ...
- oracle insert、append、parallel、随后查询的redo与磁盘读写
SQL> set autotrace traceonly statistics; SQL> insert into big_table_dir_test1 select * from bi ...
- [Oracle] Insert All的妙用
无条件的插入 Oracle中的insert all是指把同一批数据插入到不同的表中,假如如今有个需求:把t表中的数据分别插入t1,t2,假设你不知道insert all,你可能会使用insert插入2 ...
- ORACLE INSERT ALL 用法
1INSERT ALL 1.1句法 multi_table_insert :: = conditional_insert_clause :: = 1.2multi_table_insert 在多表插入 ...
随机推荐
- iOS_24_画画板(含取色板)
终于效果例如以下: 一.简单说明 1.使用一个数组 strokesArr(笔画数组)记录全部笔画.数组中保存的是一个个的笔画字典,一个字典就是一个笔画.笔画字典中有三项:笔画的大小.颜色.points ...
- php 无错误提示 的解决方法
问:我在win7安装了PHP,浏览器是IE9.我代码写错了,浏览器一点错误提示都没有,一片空白.如果写对了,就能正常运行显示出来.请问这是怎么回事,应该怎么弄?你们两个的方法都试过,但都没有提示(注: ...
- 【原创】构建高性能ASP.NET站点 第七章 如何解决内存的问题(前中篇)—托管资源优化—监测CLR性能
原文:[原创]构建高性能ASP.NET站点 第七章 如何解决内存的问题(前中篇)-托管资源优化-监测CLR性能 构建高性能ASP.NET站点 第七章 如何解决内存的问题(前中篇)—托管资源优化—监测C ...
- 安装numpy、nltk问题汇总
系统环境是win7(64bit)+python3.4(64bit)+numpy1.82+vs2012 1.假设用sourceforge上编译好的32bit的exe安装,会提示'python versi ...
- Oracle FGA审计记录的清理步骤
注意:本文为原创文章,转载请注明出处: http://blog.csdn.net/msdnchina/article/details/38435999 一.确认有哪些fga审计策略, 从select ...
- js怎样推断一个对象{}是否为空对象,没有不论什么属性
js怎样推断一个对象{}是否为空对象,没有不论什么属性 前段时间用js写了一个相似"angularjs"用于数据绑定的东西,功能是比較简单了, 通常应该传进来的是一个ArrayLi ...
- jQuery Mobile发展新闻阅读器,适应iphone和android打电话
程序猿是很不赖,你知道. 我们经常新浪,腾讯.雅虎等各大网站看到上述新闻.他们还推出了自己的移动新闻阅读器.今天,我自己用的jQuery Mobile 为了实现这一功能,.图像大小上传限制的大小250 ...
- 系列五AnkhSvn
原文:系列五AnkhSvn AnkhSvn介绍 AnkhSVN是一款在VS中管理Subversion的插件,您可以在VS中轻松的提交.更新.添加文件,而不用在命令行或资源管理器中提交.而且该插件属于开 ...
- IOS 数据库管理系统(SQLite)
嵌入式数据库 SQLite嵌入式数据库的优势 1.支持事件,你并不需要配置,无需安装,不需要管理员 2.支持部分脂肪SQL92 3.完整的数据库被存储在磁盘上的文件的顶部,相同的数据库文件可以在不同机 ...
- 初识 Cloudera Impala
Impala是Cloudera公司主导开发的新型查询系统,它提供SQL语义,能查询存储在Hadoop的HDFS和HBase中的PB级大数据.已有的Hive系统尽管也提供了SQL语义,但因为Hive底层 ...