oracle中insert all的用法

oracle中insert all的用法

现在有个需求:将数据插入多个表中。怎么做呢?可以使用insert into语句进行分别插入,但是在oracle中有一个更好的实现方式:使用insert all语句。
insert all语句是oracle中用于批量写数据的 。insert all分又为无条件插入和有条件插入。

一、表和数据准备

--创建表
CREATE TABLE stu(
   ID   NUMBER(3),
   NAME VARCHAR2(30),
   sex  VARCHAR2(2)
);

--删除表
drop table stu;
drop table stu1;
drop table stu2;

--向stu表中插入数据
INSERT INTO stu(ID, NAME, sex) VALUES(1, '成都', '女');
INSERT INTO stu(ID, NAME, sex) VALUES(2, '深圳', '男');
INSERT INTO stu(ID, NAME, sex) VALUES(3, '上海', '女');

--复制表结构创建表stu1,stu2
CREATE TABLE stu1 AS SELECT t.* FROM stu t WHERE 1 = 2;
CREATE TABLE stu2 AS SELECT t.* FROM stu t WHERE 1 = 2;
--查询表
select * from stu;
select * from stu1;
select * from stu2;

二、insert all无条件插入

将stu表中的数据插入stu1和stu2表中可以这样写

insert all
    into stu1 values(id,name,sex)
    into stu2 values(id,name,sex)
    select id,name,sex from stu;

三、insert all有条件插入

有条件插入又分为两种:insert all when...和insert first when...

  • insert all when类型
insert all
    when id=1 then
    into stu1 values(id,name,sex)
    when id=2 then
    into stu2   values(id,name,sex)
    else
    into stu1 values(id,name,sex)
    select id,name,sex from stu;

结果如下:

  • insert first when 类型
insert first
 when id<=2 then
 into stu1 values(id,name,sex)
 when id<=3 then
 into stu2 values(id,name,sex)
 select id,name,sex from stu;

结果如下:

四、insert all和insert first的区别

insert first是考虑先后关系的,如果有数据满足第一个when条件又满足第二个when条件,则执行第一个then插入语句,第二个then就不插入。反之有数据不满足第一个when条件且满足第二个when条件,则数据会插入第二个条件下对应的表中,这也正是insert first与inset all的区别。
简单来说就是all只要满足条件,就会插入,这个会造成重复插入;first只要有一个满足条件,后面的条件不再判断,不会造成重复插入。
注意:insert all 无法支持序列插入,会导致两边不一致。

参考博文:https://www.cnblogs.com/myrunning/p/4386004.html
https://blog.csdn.net/ghostgant/article/details/5700228
https://www.cnblogs.com/hrhguanli/p/3773020.html
https://www.cnblogs.com/shoshana-kong/p/9340391.html

原文地址:https://www.cnblogs.com/jasonboren/p/12102490.html

时间: 2024-08-13 17:35:46

oracle中insert all的用法的相关文章

Oracle中insert into select和select into的用法(转)

原文地址:http://hi.baidu.com/huahua035/item/87d5e71e6a7d31f187ad4ea5 两张表进行数据的拷贝,最常用的拷贝语句是: insert into select  和 select into from 但是请绝对的注意: 在Oracle中select into from不可以使用-----原因很简单:select into是PL/SQL language 的赋值语句!如果使用则Oracle会抛出0RA-00905:missing keyword的

Oracle中常用的to_Char用法详解

Oracle中常用的to_Char用法详解(有FMT的详细列表) The following are number examples for the to_char function. to_char(1210.73, '9999.9') would return '1210.7' to_char(1210.73, '9,999.99') would return '1,210.73' to_char(1210.73, '$9,999.00') would return '$1,210.73'

oracle 中start with 的用法

oracle 中start with 的用法 发表于2013/3/3 23:29:35  40191人阅读 分类: Oracle oracle 提供了start with connect by 语法结构可以实现递归查询. 1. 一个简单举例: SQL> select *  from test; BILL_MONTH           DAY_NUMBER MSISDN -------------------- ---------- -------------------- 200803    

Oracle中merge into的用法

我们操作数据库的时候,有时候会遇到insertOrUpdate这种需求. 如果数据库中存在数据就update,如果不存在就insert. 以前的时候,需要额外select查询一下,如果有数据就update,如果没有数据就insert. 而现在Orcale数据库都提供了 MERGE 方法来处理这种需求. MERGE 命令使用一条语句从一个或者多个数据源中完成对表的更新和插入数据. MERGE 语法: MERGE INTO [your table-name] [rename your table h

Oracle中的时间函数用法(to_date、to_char) (总结)

一.24小时的形式显示出来要用HH24 select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from dual; select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mi:ss') from dual; 二.to_date() function 1.日期格式参数含义说明 D一周中的星期几 DAY天的名字,使用空格填充到9个字符 DD月中的第几天 DDD年中的第几天 DY天的简写名 IW ISO标准

【Oracle】Oracle中dump函数的用法

一.函数标准格式: DUMP(expr[,return_fmt[,start_position][,length]]) 基本参数时4个,最少可以填的参数是0个.当完全没有参数时,直接返回null.另外3个参数也都有各自的默认值: expr:这个参数是要进行分析的表达式(数字或字符串等,可以是各个类型的值) return_fmt:指返回参数的格式,有5种用法: 1)8:以8进制返回结果的值 2)10:以10进制返回结果的值(默认) 3)16:以16进制返回结果的值 4)17:以单字符的形式返回结果

Oracle 中 流程控制函数 decode用法

函数介绍 DECODE函数是ORACLE PL/SQL的功能强大的函数之一,目前还只有ORACLE公司的SQL提供了此函数,其它数据库厂商的SQL实现还没有此功能. DECODE有什么用途呢?先构造一个例子,假设我们想给智星职员加工资,其标准是:工资在8000元以下的加20%:工资在8000元或以上的加15%. 通常的做法是,先选出记录中的工资字段值? select salary into var-salary from employee,然后对变量var-salary用if-then-else

oracle中 merge into 的用法

很多时候我们需要通过筛选条件同时对表进行 更新,插入,删除 等操作.这样如果我们单一的去操作表会显得很麻烦,下面会说到这个merge  into 的用法会极大的优化我们操作表的时间和代码量. 举例,先新建2个表: create table book( id number, name varchar(64), price number, primary key(id) ) create table pbook as select * from book delete pbook 这里create

Oracle 中MERGE语句的用法(转载)

原文章出处(http://blog.csdn.net/lichkui/article/details/4306299) MERGE语句是Oracle9i新增的语法,用来合并UPDATE和INSERT语句.通过MERGE语句,根据一张表或子查询的连接条件对另外一张表进行查询,连接条件匹配上的进行UPDATE,无法匹配的执行INSERT.这个语法仅需要一次全表扫描就完成了全部工作,执行效率要高于INSERT+UPDATE. //表1create table subs(msid number(9),