专栏首页Nicky's blogOracle insert all用法简介

Oracle insert all用法简介

insert all是oracle中用于批量写数据的

现在直接通过例子学习一下,比较简单直观,例子来自《收获,不止SQL优化》一书

环境准备

create table t as select object_name,rownum as object_id
from dba_objects where rownum<=10;

创建两张测试表,不用写数据

create table t1 as select * from t where 1=2;
create table t2 as select * from t where 1=2;

然后演示一下insert all的用法

无条件写数据的情况

insert all into t1
  (object_name, object_id) into t2
  (object_name, object_id)
  select * from t;
commit;

有条件写数据的情况

truncate table t1;
truncate table t2;
insert all when object_id < 5 then into t1
  (object_name, object_id) when object_id >= 5 then into t2
  (object_name, object_id)
  select * from t;
commit;

insert first insert first情况,介绍一下insert first的用法,insert first用法和insert all类似,区别的是insert first多了筛选的步骤,简单来说就是和insert all一样,符合条件的同样会写数据,不过已经存在数据了,insert first是不会写入的,而insert all是会出现重复数据的情况

truncate table t1;
truncate table t2;
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;

pivoting insert 然后再演示一下pivoting insert的情况,pivoting insert可以说是insert all的一直特殊情况,不过oracle官方还是区分出来,pivoting insert可以翻译为旋转写入,名称的不重要,看一下例子就懂了

环境准备

drop table sales_source_data;
create table sales_source_data(
employee_id number(10),
week_id number(2),
sales_mon number(8,2),
sales_tue number(8,2),
sales_wed number(8,2),
sales_thur number(8,2),
sales_fri number(8,2)
);
insert into sales_source_data values(280,6,2000,3000,4000,5000,6000);
commit;
create table sales_info(
employee_id number(10),
week number(2),
sales number(8,2)
);

按照条件进行写数据

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;
commit;

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 两则数据库优化的分析与解决

    No matter who or what, you will not destroy me. If you knock me down, I'll get b...

    AustinDatabases
  • 程序员与数据库中的设计

    个人对程序员是充满无比的崇敬和敬仰的,这辈子没做程序员是我最大的遗憾。他们创造这这个世界,的确是伟大的。

    AustinDatabases
  • 《Oracle Concept》第三章 - 7

    按照《Oracle Conecpt》的结构一起了解Oracle数据库,这是学习Oracle从入门到精通的基础。

    bisal
  • MYSQL performance_schema 招招毙命

    最近一段时间和MYSQL的 performance_schema 较劲,之前总结的比较散,没有一个整体的观,仅仅是细枝末叶的东西。本次的对performance...

    AustinDatabases
  • ORACLE物化视图解决CMS数据同步一例 与 来不及的DATA PIPLELINE

    为啥要牵扯仅DataPiple Line, 因为如果有DataPipe Line,我下面的故事就不用写了。所以一项新技术和软件的开发可以解决不少头疼的问题。那下...

    AustinDatabases
  • PostgreSQL 中的一些监控及问题发现脚本

    作为可以替换ORACLE 重要的一员,PG 是很值得学习。 今天总结一下 PostgreSQL, 如何进行故障的排错,小道消息是,昨天上午还是小道消息的,估计今...

    AustinDatabases
  • MYSQL 的 程序设计中的 “坑” 一例

    最近ORACLE 12C 的某个BUG 霸占了微信公众号,仔细看了看,其实也还好。每种数据库在上了新版本后都会有问题,其实不光是数据库,每个软件都包含着BUG,...

    AustinDatabases
  • POSTGRESQL 吊打 ORACLE 的“傲娇”

    大早上的因为昨天的网络问题,MGR 的一台机器就unreachable, 按照流程将节点添加进原来的集群,失败failed, 搞了一上午,终于把集群 succe...

    AustinDatabases
  • 什么是MYSQL的开发思路,一个实例切入

    昨天运维的亲,来找我,要统计一个事情,具体的情况是这样,要判断某台机器中的的 priority 为 1 的数据在 900秒内,并且计数,如果这样的情况超过1 条...

    AustinDatabases
  • 征信上报系统的渐进思路

    公司最近在研究怎么将CMS 系统中的征信上报的功能,拆分出来。原来的系统在ORACLE 数据库中,每次需要通过存储过程进行数据的生成在同步到征信上报系统中。

    AustinDatabases

扫码关注云+社区

领取腾讯云代金券