美文网首页程序园
Oracle SQL 学习笔记15 - 大数据量操作

Oracle SQL 学习笔记15 - 大数据量操作

作者: 赵阳_c149 | 来源:发表于2020-02-06 16:02 被阅读0次

INSERT ALL

Oracle 中 INSERT ALL 是指把同一批数据插入到不同的表中。主要用于数据仓库分发数据。这方式要比写多个 INSERT INTO 语句效率要高。因为不论插入多少张表,主表(参考 dual)只会被读取一次。
假如,现在有个需求,把表 t 的中数据分别插入到 t1、t2,如果你不知道 insert all,你可能会使用 insert into 插入 2 次,在两次 insert 过程中,有可能 t 表的数据发生了改变,从而导致 t1、t2 表得到的数据不一样,正确的写法是用 INSERT ALL 【1】

INSERT ALL语句的类型

主要有四种类型:

  1. Unconditional ALL INSERT
      INSERT ALL 
         INTO stu1(id, NAME, sex) 
         INTO stu2(id, NAME, sex)
      SELECT t.id, t.name, t.sex FROM stu t WHERE t.id = 10001;
  1. Conditional ALL INSERT
INSERT ALL
  WHEN id >= 2 THEN
    INTO stu1(ID, NAME, sex)
  WHEN id >= 3 THEN
    INTO stu2(ID, NAME, sex) 
SELECT t.id, t.name, t.sex FROM stu t;
  1. Conditional FIRST INSERT
    仅对第一个 when 进行匹配(第一次匹配成功后,break)
INSERT FIRST
  WHEN id >= 2 THEN
    INTO stu1(ID, NAME, sex)
  WHEN id >= 3 THEN
    INTO stu2(ID, NAME, sex) 
SELECT t.id, t.name, t.sex FROM stu t;
  1. Pivoting INSERT
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_WED, sales_THUR, sales_FRI
  FROM sales_source_data;
insert_all.png

INSERT ALL 语法

INSERT [ALL] [conditional_insert_clause]
[insert_into_clause values_clause]  (subquery)

其中,insert_into_clause values_clause 可以表示为:

[ALL] [FIRST]
[WHEN condition THEN] [insert_into_clause values_caluse]
[ELSE] [insert_into_clause values_clause]

使用Merge语句

在一个语句中进行有条件的更新和插入删除操作。如果数据已经存在,则更新;不存在则插入。
优势:

  1. 不用单独写update和insert
  2. 性能高且易用
  3. 主要用于数据仓库的大量数据处理

语法

MERGE INTO table_name table_alias
  USING (table|view|sub_query) alias 
  ON (join condition)
  WHEN MATCHED THEN
    UPDATE SET
    col1 = col1_val
    col2 = col2_val
  WHEN NOT MATCHED THEN
    INSERT (column_list)
    VALUES (column_values)

了解几种Flashback语句

从10g开始,Oracle开始大面积引入“Flashback”技术,或者Flashback技术工具集合,来提供多级别多粒度的“逻辑恢复”。经过若干年的发展,Flashback家族已经有诸多的分支技术,依托不同的技术,来实现多粒度的数据恢复。


His.JPG

FLASHBACK依赖于undo机制【3】。Undo记录的是数据DML操作的前镜像,这是Oracle的核心机制之一。

Flashback Version Query

Flashback Version Query引入了一些数据表“伪列”,可以提供对数据版本的操作和检索。【2】

SELECT salary FROM employees3
WHERE emplopyee_id = 107;

更新表:

UPDATE employees3 SET salary = salary * 1.30
WHERE employee_id = 107;
COMMIT;

查看历史数据:

SELECT salary FROM employees3
  VERSIONS BETWEEN SCN MINVALUE AND MAXVALUE
WHERE employee_id = 107;

FLASHBACK TABLE 语句

FLASHBACK TABLE 用于修复误操作的数据。它将表恢复到较旧的时间点,易用、可靠、快速,而且可在线操作。

FLASHBACK  TABLE [schema.]table [,[schema.]table]...
TO {TIMESTAMP | SCN} expr
[{ENABLE | DISABLE } TRIGGERS];

FLASHBACK DROP 语句

Flashback Drop 允许您将之前删除的表(但不是截断的表)恢复到刚好删除它之前的状态,同时还会恢复所有索引以及任何触发器和权限。唯一的主键和非空约束也会被恢复,但不包括外键。
删除表:

DROP TABLE emp2;

查看回收站中被删除表的信息:

SELECT original_name, operation, droptime
FROM recyclebin;
# 或者
show recyclebin;

闪回:

FLASHBACK TABLE emp2 TO BEFORE DROP;

【1】https://blog.csdn.net/qq_34745941/article/details/81462536
【2】聊聊闪回版本查询Flashback Version Query
【3】[Oracle]理解undo表空间

相关文章

  • Oracle SQL 学习笔记15 - 大数据量操作

    INSERT ALL Oracle 中 INSERT ALL 是指把同一批数据插入到不同的表中。主要用于数据仓库分...

  • sql面试技术问题

    1:sql和oracle的区别 sql只支持windows系统,oracle各个系统都可以支持。 sql操作简单,...

  • oracle常用操作

    切换oracle用户 su - oracle 进入操作命令 sqlplus / as sysdba;注意:sql操...

  • Oracle学习之——SQL语言

    本文将为您描述Oracle学习 SQL语言,教程操作步骤: SQL语言是高级的结构化查询语言,大大减轻了用户的负担...

  • 30、oracle中数据的导入导出

    工作中往往涉及到数据库的导入导出操作,oracle数据库的导出方式可以选择dmp的格式或者sql的方式;数据量少的...

  • Oracle SQL基本操作

    Oracle SQL基本操作 Oracle数据库基本操作 1.概述 Oracle数据库客户端一般需要安装在服务器上...

  • Oracle操作符,函数

    SQL 操作符 Oracle 支持的 SQL 操作符分类如下: 操作符介绍(一) 算术操作符 用于执行数值计算 可...

  • Oracle和SQL学习笔记

    所写博客来自网课视频、本网站或其他网站,只属于资料整理、用于个人学习,如有侵权行为可联系删除。 --创建表空间 c...

  • Oracle SQL 学习笔记31 - Oracle优化

    PL/SQL代码优化 可以从以下几个方面优化PL/SQL 写相似或相同的代码以便于复用 在SQL和PLSQL之间做...

  • Oracle SQL 学习笔记6 - Oracle SQLPLU

    Oracle SQLPLUS 下可以设置编辑模式。 接下来就可以以vi的方式编辑上一次执行过的SQL脚本。 可以将...

网友评论

    本文标题:Oracle SQL 学习笔记15 - 大数据量操作

    本文链接:https://www.haomeiwen.com/subject/mlfuxhtx.html