[Oracle] Insert All神奇

news/2024/7/24 10:20:50 标签: 数据库

无条件插入

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/all 是对每一行来进行推断
两者差别:
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


行转列插入

insert all还能够实现行转列插入:
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. 多表插入语句不能在子查询序列被用于。

版权声明:本文博客原创文章,博客,未经同意,不得转载。


http://www.niftyadmin.cn/n/1179407.html

相关文章

ORACLE基础应用学习-- 各种故障的恢复方法总结

通过前面的一些实验&#xff0c;结合书本及网上方法得出一些总结&#xff0c;仅作笔记&#xff0c;供参考使用&#xff1a; 转载于:https://blog.51cto.com/pimg2005/844768

摆棋子

题意&#xff1a; 在一个给定形状的棋盘&#xff08;形状可能是不规则的&#xff09;上面摆放棋子&#xff0c;棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列&#xff0c;请编程求解对于给定形状和大小的棋盘&#xff0c;摆放k个棋子的所有可行的摆…

vue基础学习(1.2):vue的计算属性和监视

1. 计算属性 使用computed属性去定义计算属性的方法&#xff1b;html页面中&#xff0c;可以使用{{方法名}}显示计算结果&#xff1b;高级用法&#xff1a;可以使用get()和set(value)方法实现对属性数据的展示和监视&#xff0c; 注意&#xff1a;计算属性存在缓存&#xff0c…

J2EE 简介

一、Java平台版本 1.适用于小型设备和智能卡的Java 2平台Micro版&#xff08;Java 2 Platform Micro Edition&#xff0c;J2ME&#xff09; 2.适用于桌面系统的Java 2平台标准版&#xff08;Java 2 Platform Standard Edition&#xff0c;J2SE&#xff09; 3.适用于创建服务器应…

对sql的查询语句做成对象式,简单实现。查询参数实现一

这里我就不想多说应该能看懂代码的都应该知道什么意思了。这个类暂时应该就是这样子了。package net.zz.zjf.plugin; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; /*** Created by ZaoSheng on 2015/7/15.*/ public class QueryPara…

vue基础学习(1.3):vue的class与style的绑定以及条件渲染

1. class与style的强制绑定 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>04_class与style绑定</title><style>.aClass {color: red;}.bClass {color: blue;}</style> </head…

redhat linux 安装 gcc编译器

Linux软件安装通用思路 在Linux系统中&#xff0c;软件安装程序比较纷繁复杂&#xff0c;不过最常见的有两种&#xff1a;   1&#xff09;一种是软件的源代码&#xff0c;您需要自己动手编译它。这种软件安装包通常是用gzip压缩过的tar包&#xff08;后缀为.tar.gz&#x…

struts2 自定义类型转换器

需求&#xff1a;将客户端中一个文本框中指定的三原色转换成指定的对象封装。     1.定义一个封装的Color类对象 1 public class Color implements Serializable{2 /**3 * 最终转换成的Color类对象4 */5 private static final long serialVersionUID 1L…