在数据仓库中的转换和装载过程中,可能会使用INSERT ALL语句,这篇文章简单介绍一下INSERT ALL语句。
INSERT ALL是9i新增的语法,它扩充了原有的INSERT语句,使得INSERT语句从原来的只能插入到一张表发展到可以同时插入多张表,还可以根据判断条件来决定每条记录插入到哪张或哪几张表中。
下面看几个简单的例子:
SQL> CREATE TABLE TABLE_STORAGE
2 (
3 TABLE_NAME VARCHAR2(30),
4 TABLESPACE_NAME VARCHAR2(30),
5 PCT_FREE NUMBER,
6 PCT_USED NUMBER,
7 INI_TRANS NUMBER,
8 MAX_TRANS NUMBER,
9 INITIAL_EXTENT NUMBER,
10 NEXT_EXTENT NUMBER,
11 MIN_EXTENTS NUMBER,
12 MAX_EXTENTS NUMBER,
13 PCT_INCREASE NUMBER,
14 FREELISTS NUMBER,
15 FREELIST_GROUPS NUMBER
16 );
表已创建。
SQL> CREATE TABLE TABLE_STAT
2 (
3 TABLE_NAME VARCHAR2(30),
4 NUM_ROWS NUMBER,
5 BLOCKS NUMBER,
6 EMPTY_BLOCKS NUMBER,
7 AVG_SPACE NUMBER,
8 CHAIN_CNT NUMBER,
9 AVG_ROW_LEN NUMBER
10 );
表已创建。
SQL> INSERT ALL
2 INTO TABLE_STORAGE VALUES (TABLE_NAME, TABLESPACE_NAME, PCT_FREE, PCT_USED,
3 INI_TRANS, MAX_TRANS, INITIAL_EXTENT, NEXT_EXTENT, MIN_EXTENTS, MAX_EXTENTS,
4 PCT_INCREASE, FREELISTS, FREELIST_GROUPS)
5 INTO TABLE_STAT VALUES (TABLE_NAME, NUM_ROWS, BLOCKS, EMPTY_BLOCKS, AVG_SPACE,
6 CHAIN_CNT, AVG_ROW_LEN)
7 SELECT * FROM USER_TABLES;
已创建
54行。
SQL> SELECT COUNT(*) FROM TABLE_STORAGE;
COUNT(*)
----------
27
SQL> SELECT COUNT(*) FROM TABLE_STAT;
COUNT(*)
----------
27
SQL> SELECT COUNT(*) FROM USER_TABLES;
COUNT(*)
----------
27
SQL> DROP TABLE TABLE_STAT;
表已丢弃。
SQL> DROP TABLE TABLE_STORAGE;
表已丢弃。
上面是最简单的INSERT ALL语句的实现,下面看看带条件的INSERT ALL语句。
SQL> CREATE TABLE TABLE_ALL (TABLE_NAME VARCHAR2(30));
表已创建。
SQL> CREATE TABLE INDEX_ALL (INDEX_NAME VARCHAR2(30));
表已创建。
SQL> CREATE TABLE OBJECT_OTHER (OBJECT_NAME VARCHAR2(30), OBJECT_TYPE VARCHAR2(30));
表已创建。
SQL> INSERT ALL
2 WHEN (OBJECT_TYPE = 'TABLE') THEN
3 INTO TABLE_ALL VALUES (OBJECT_NAME)
4 WHEN (OBJECT_TYPE = 'INDEX') THEN
5 INTO INDEX_ALL VALUES (OBJECT_NAME)
6 ELSE
7 INTO OBJECT_OTHER
8 SELECT OBJECT_NAME, OBJECT_TYPE FROM USER_OBJECTS
9 ;
已创建
91行。
SQL> SELECT COUNT(*) FROM USER_OBJECTS WHERE OBJECT_TYPE = 'TABLE';
COUNT(*)
----------
27
SQL> SELECT COUNT(*) FROM USER_OBJECTS WHERE OBJECT_TYPE = 'INDEX';
COUNT(*)
----------
14
SQL> SELECT COUNT(*) FROM USER_OBJECTS
2 WHERE OBJECT_TYPE NOT IN ('TABLE', 'INDEX');
COUNT(*)
----------
50
SQL> SELECT COUNT(*) FROM TABLE_ALL;
COUNT(*)
----------
27
SQL> SELECT COUNT(*) FROM INDEX_ALL;
COUNT(*)
----------
14
SQL> SELECT COUNT(*) FROM OBJECT_OTHER;
COUNT(*)
----------
50
SQL> DROP TABLE TABLE_ALL;
表已丢弃。
SQL> DROP TABLE INDEX_ALL;
表已丢弃。
SQL> DROP TABLE OBJECT_OTHER;
表已丢弃。
下面看一下INSERT ALL和INSERT FIRST的区别:
SQL> CREATE TABLE TABLESPACE_USERS (NAME VARCHAR2(30), TYPE VARCHAR2(30));
表已创建。
SQL> CREATE TABLE TABLE_ALL (TABLE_NAME VARCHAR2(30));
表已创建。
SQL> INSERT ALL
2 WHEN (SEGMENT_TYPE = 'TABLE') THEN
3 INTO TABLE_ALL VALUES (SEGMENT_NAME)
4 WHEN (TABLESPACE_NAME = 'USERS') THEN
5 INTO TABLESPACE_USERS VALUES (SEGMENT_NAME, SEGMENT_TYPE)
6 SELECT SEGMENT_NAME, SEGMENT_TYPE, TABLESPACE_NAME
7 FROM USER_SEGMENTS;
已创建
69行。
SQL> SELECT COUNT(*) FROM TABLE_ALL;
COUNT(*)
----------
21
SQL> SELECT COUNT(*) FROM TABLESPACE_USERS;
COUNT(*)
----------
48
SQL> SELECT COUNT(*) FROM TABLESPACE_USERS WHERE TYPE = 'TABLE';
COUNT(*)
----------
18
SQL> TRUNCATE TABLE TABLE_ALL;
表已截掉。
SQL> TRUNCATE TABLE TABLESPACE_USERS;
表已截掉。
SQL> INSERT FIRST
2 WHEN (SEGMENT_TYPE = 'TABLE') THEN
3 INTO TABLE_ALL VALUES (SEGMENT_NAME)
4 WHEN (TABLESPACE_NAME = 'USERS') THEN
5 INTO TABLESPACE_USERS VALUES (SEGMENT_NAME, SEGMENT_TYPE)
6 SELECT SEGMENT_NAME, SEGMENT_TYPE, TABLESPACE_NAME
7 FROM USER_SEGMENTS;
已创建
51行。
SQL> SELECT COUNT(*) FROM TABLE_ALL;
COUNT(*)
----------
21
SQL> SELECT COUNT(*) FROM TABLESPACE_USERS;
COUNT(*)
----------
30
SQL> SELECT COUNT(*) FROM TABLESPACE_USERS WHERE TYPE = 'TABLE';
COUNT(*)
----------
0
最后看一下多表插入语句的限制条件:
只能对表执行多表插入语句,不能对视图或物化视图执行;
不能对远端表执行多表插入语句;
不能使用表集合表达式;
不能超过999个目标列;
在RAC环境中或目标表是索引组织表或目标表上建有BITMAP索引时,多表插入语句不能并行执行;
多表插入语句不支持执行计划稳定性;
多表插入语句中的子查询不能使用序列。
INSERT ALL和INSERT FIRST语句的差别:
其实你对比INSERT ALL和INSERT FIRST语句的例子仔细观察,就会明白这个例子的含义,两个SQL语句唯一的差别就是ALL和FIRST的差别,其余部分完成一样。
对于INSERT ALL,插入第一张表的数据,如果满足第二张表的条件,也会插入。
而INSERT FIRST不然,满足第一条插入条件的数据是不会进行随后的判断的,所以在INSERT FIRST执行后,在TABLESPACE_USERS表中看不到SEGMENT_TYPE为TABLE的记录
相关推荐
在oracle中我们可以使用insert all或者insert first语句,两者语法基本一致,区别在于: insert first:对于每一行数据,只插入到第一个when条件成立的表,不继续检查其他条件。 insert all :对于每一行数据,对每...
首先,`BULK INSERT`的基本语法如下: ```sql BULK INSERT FROM '<data_file>' WITH ( [ BATCHSIZE = batch_size ] [ , CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | code_page } ] [ , DATAFILETYPE = { 'char' | '...
INSERT INTO EMPLOYEES (LAST_NAME, FIRST_NAME, HIRE_DATE, BRANCH_OFFICE, DEPARTMENT_ID, SALARY) VALUES ('Smith', 'John', '1980-06-10', 'Los Angeles', 16, 45000); ``` 这条语句将新员工的信息插入到`...
下面是 BULK INSERT 的详细用法和参数解释: 基本语法 BULK INSERT [ [ 'database_name'.][ 'owner' ].]{ 'table_name' FROM 'data_file' } [ WITH ( [ BATCHSIZE [ = batch_size ] ] [ , ... ] ) ] 参数解释 * ...
本文将详细介绍如何利用Oracle数据库中的条件 `INSERT ALL` 和 `INSERT FIRST` 语句进行高效的数据插入操作,并通过具体的例子来说明这两种方法的使用场景及注意事项。 #### 一、条件 INSERT ALL 条件 `INSERT ALL...
rule.leftSide->firstSet.insert(symbol->firstSet.begin(), symbol->firstSet.end()); } } ``` 在这个实现中,`nonTerminals` 是一个映射,用于存储所有非终结符及其对应的First集合。`GrammarRule` 的 `right...
例如,描述中的"Persons"表,包含ID、Last Name、First Name、Address和City等字段,用于存储人员信息。每行代表一个独立的记录,而每一列则表示特定的属性。 SQL语句是与数据库交互的语言。基础的SQL语句包括: 1...
多表插入有四种类型:无条件的INSERT、有条件的ALL INSERT、有条件的FIRST INSERT和旋转INSERT。 1. **无条件的INSERT ALL**:在满足特定条件时,向所有指定的表中插入数据。例如: ```sql INSERT ALL INTO sal...
列表是最常用的一种,支持索引、切片和多种操作,如append()、insert()等。元组是不可变的列表,常用于返回多个值或作为字典的键。字典是键值对的集合,提供了高效的查找和修改功能。集合则是一组互不相同的元素,常...
SQL 语法 SQL select SQL distinct SQL where SQL AND & OR SQL Order By SQL insert SQL update SQL delete SQL 高级 SQL Top SQL Like SQL 通配符 SQL In SQL Between SQL Aliases SQL Join SQL ...
1. 分页查询:ROWNUM伪列和FETCH FIRST / OFFSET用于实现数据分页。 2. 子查询优化:使用EXISTS或IN代替子查询,提高查询效率。 3. 视图:CREATE VIEW创建虚拟表,简化复杂的查询。 4. 游标:在PL/SQL中处理单行或...
### SQL基础语法考试必备知识点 #### 一、SQL简介 SQL(Structured Query Language)是一种用于管理关系数据库的标准语言。它提供了强大的数据操作能力,包括数据查询、数据定义、数据操纵和数据控制等功能。 ####...
3. SQL语法:SQL主要包括四大语句:SELECT(查询)、INSERT(插入)、UPDATE(更新)和DELETE(删除)。《Head First SQL》将详细解释这些语句的使用方法,如何查询、添加、修改和删除数据库中的数据。 4. SELECT...
MySQL是一种广泛使用的开源...以上就是MySQL语法语句的基本框架,每个部分都有许多细分的细节和用法,需要通过实际操作和学习来深入了解和掌握。实践中,根据业务需求灵活运用这些语句,可以实现高效的数据管理和处理。
在《Head First PHP&MySQL》中,读者将学习如何创建、查询和管理数据库,包括数据表的创建、数据操作语言(DML)如INSERT、UPDATE和DELETE,以及数据查询语言(DQL)中的SELECT语句。还将讨论数据库设计的基本原则,...
1. **掌握First集的概念及其生成规则:**通过给定的形式文法规则,理解和掌握如何生成每个非终结符的First集。 2. **使用C++实现First集的生成算法:**利用Visual Studio 2015等工具,编写代码实现First集的计算功能...
根据给定的文件信息,以下是对Oracle语法大全中提及的关键知识点的详细解析: ### Oracle SQL语句分类 Oracle SQL语句主要分为五大类,每类都有其特定的用途: 1. **数据检索(Select)**:用于从数据库中检索...
##### 13.2.4 INSERT 语法 `INSERT` 语句用于向表中插入新的行。基本语法如下: ```sql INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...); ``` 其中 `table_name` 是要插入数据的表...