关于INSERT ALL和INSERT FIRST
一、无条件 INSERT ALL
二、条件 INSERT ALL
三、条件 INSERT FIRST
Insert…Select
使用Insert Select实现同时向多个表插入记录
一、无条件 INSERT ALL
---------------------------------------------------------------------------------------------
INSERT ALL
insert_into_clause values_clause_1
[insert_into_clause values_clause_2]
……
Subquery;
----------------------------------------------------------------------------------------------
1、指定所有跟随着的多表 insert_into_clauses 执行无条件的多表插入;
2、对于每个由子查询返回的行, Oracle 服务器执行每一个 insert_into_clause一次。
二、条件 INSERT ALL
---------------------------------------------------------------------------------------------
INSERT ALL
WHEN condition THEN insert_into_clause values_clause
[WHEN condition THEN] [insert_into_clause values_clause]
……
[ELSE] [insert_into_clause values_clause]
Subquery;
--------------------------------------------------------------------------------------------
1、指定 conditional_insert_clause 来执行一个条件多表插入;
2、Oracle 服务器通过相应的 WHEN 条件过滤每一个 insert_into_clause,确定是否执行这个 insert_into_clause;
3、一个单个的多表插入语句可以包含最多 127 个 WHEN 子句。
三、条件 INSERT FIRST
--------------------------------------------------------------------------------------------
INSERT FIRST
WHEN condition THEN insert_into_clause values_clause
[WHEN condition THEN] [insert_into_clause values_clause]
……
[ELSE] [insert_into_clause values_clause]
Subquery;
--------------------------------------------------------------------------------------------
1、Oracle 服务器对每一个出现在语句顺序中的 WHEN 子句求值;
2、如果第一个 WHEN 子句的值为 true,Oracle 服务器对于给定的行执行相应的 INTO 子句,并且跳过后面的 WHEN 子句(后面的when语句都不再考虑满足第一个When子句的记录,即使该记录满足when语句中的条件)。
注:多表 INSERT 语句上的约束
a、你只能在表而不能在视图上执行多表插入;
b、你不能执行一个多表插入到一个远程表;
c、在执行一个多表插入时,你不能指定一个表集合表达式;
d、在一个多表插入中,所有的 insert_into_clauses 不能组合指定多于 999 个目列;
e、只有当所有insert_into_clauses中的表数据都没有发生更新时,Rollback才会起作用。
EG:
Tables:
z_test(id int,name varchar2(10));
z_test1(id int ,name varchar2(10));
z_test2(id int);
z_test3(name varchar2(10);
初始数据:
Id Name
10 133
5 184
1 18423
1 18445
1 18467
6 129
2 12923
2 12945
z_test1, z_test2,z_test3均为空。
测试一:无条件 INSERT ALL
SQL 语句:
----------------------------------------------------------------------------
SQL> Insert All
2 Into z_test1(id,name) values (id,name)
3 Into z_test2(id) values(id)
4 Select id,name from z_test;
16 rows created.
----------------------------------------------------------------------------
测试结果:
----------------------------------------------------------------------------
SQL> select * from z_test1;
ID NAME
---------- --------------------
10 133
5 184
1 18423
1 18445
1 18467
6 129
2 12923
2 12945
8 rows selected.
SQL> select * from z_test2;
ID
----------
10
5
1
1
1
6
2
2
8 rows selected.
----------------------------------------------------------------------------
测试二:条件 INSERT ALL
SQL 语句:
----------------------------------------------------------------------------
SQL> Insert All
2 when id>5 then into z_test1(id, name) values(id,name)
3 when id<>2 then into z_test2(id) values(id)
4 else into z_test3 values(name)
5 select id,name from z_test;
10 rows created.
----------------------------------------------------------------------------
测试结果:
----------------------------------------------------------------------------
SQL> select * from z_test1;
ID NAME
---------- --------------------
10 133
6 129
SQL> select * from z_test2;
ID
----------
10
5
1
1
1
6
6 rows selected.
SQL> select * from z_test3;
NAME
--------------------
12923
12945
2 rows selected.
----------------------------------------------------------------------------
测试三:条件 INSERT FIRST
SQL 语句:
----------------------------------------------------------------------------
SQL> Insert First
2 when id=1 then into z_test1 values(id,name)
3 when id>5 then into z_test2 values(id)
4 else into z_test3 values(name)
5 select * from z_test;
8 rows created.
----------------------------------------------------------------------------
测试结果:
----------------------------------------------------------------------------
SQL> select * from z_test1;
ID NAME
---------- --------------------
1 18423
1 18445
1 18467
3 rows created.
SQL> select * from z_test2;
ID
----------
10
6
2 rows created.
SQL> select * from z_test3;
NAME
--------------------
184
12923
12945
3 rows created.
分享到:
相关推荐
insert first:对于每一行数据,只插入到第一个when条件成立的表,不继续检查其他条件。 insert all :对于每一行数据,对每一个when条件都进行检查,如果满足条件就执行插入操作。 但是在pg中是不支持该语法的,...
**注意:** Oracle和DB2中的游标语法类似,但在DB2中,`DECLARE`关键字用于声明游标。 ##### 3.2 UDF和触发器中显式游标的转换 **Oracle:** ```sql CREATE OR REPLACE FUNCTION get_data RETURN NUMBER IS CURSOR...
Conditional FIRST INSERT 6-13 Pivoting INSERT 6-15 External Tables 6-18 Creating an External Table 6-19 Example of Creating an External Table 6-20 Querying External Tables 6-23 CREATE INDEX with ...
4. 条件ALL INSERT和有条件的第一INSERT: - 条件ALL INSERT允许根据特定条件插入所有满足条件的行。如果满足条件,则数据同时插入到指定的所有表。 - 条件FIRST INSERT则是在满足条件时,只将数据插入到第一个指定...
Oracle SQL 是一种强大的数据库查询和编程语言,广泛用于在Oracle数据库管理系统中操作和管理数据。在Oracle中,插入数据到表中的主要语句是`INSERT INTO`,它允许你将新记录添加到已存在的表中。下面我们将深入探讨...
在本文中,我们将探讨如何使用 Java 操作 Oracle 数据库,包括建表、插入数据和删除数据等操作。 Java 操作 Oracle 数据库的必要条件 在使用 Java 操作 Oracle 数据库之前,需要满足以下几个条件: 1. 安装 ...
Oracle 日期和时间的存储与处理 Oracle 日期和时间的存储与处理是 Oracle Database 11g SQL 开发指南中的重要章节。本章节主要介绍了处理并存储一个特定的日期和时间,包括使用 DATE 类型存储日期和时间、使用...
多表插入有四种类型:无条件的INSERT、有条件的ALL INSERT、有条件的FIRST INSERT和旋转INSERT。 1. **无条件的INSERT ALL**:在满足特定条件时,向所有指定的表中插入数据。例如: ```sql INSERT ALL INTO sal...
1. SQL基础:首先会介绍SQL的基本概念,包括数据类型、表的创建与管理、列和行的操作,以及如何使用DML(Data Manipulation Language)语句,如INSERT、UPDATE和DELETE。 2. 查询语言:详述SELECT语句的用法,包括...
- **Oracle** 和 **DB2** 都支持异常处理和条件处理。 - Oracle示例: ```sql DECLARE PRAGMA EXCEPTION_INIT(e, -20000); BEGIN -- some code that may raise exception e EXCEPTION WHEN e THEN -- handle...
**带条件的Insertfirst:** - 插入数据到第一个符合条件的表中。 **pivotinginsert(旋转添加):** - 根据某一列的不同值将数据分发到不同的表中。 **使用限制:** - 有些操作可能受到Oracle版本的限制。 #### ...
根据提供的文件信息,本文将对...以上内容详细地介绍了SQL Server、Oracle和DB2这三种数据库系统在常见SQL操作上的异同。通过这些对比,我们可以更好地理解不同数据库系统的特点,并在实际开发过程中做出更合适的选择。
Oracle SQL语法大全是一个重要的学习资源,它涵盖了在Oracle数据库管理系统中进行数据查询、操作和管理时所需的各种SQL语句和技巧。SQL(Structured Query Language)是用于与关系型数据库交互的语言,而Oracle作为...
考察点:在Oracle数据库中使用SQL INSERT语句插入数据行。 题目:考虑以下EMPLOYEES表结构: ``` EMPLOYEE_ID NUMBER PrimaryKey FIRST_NAME VARCHAR2(25) LAST_NAME VARCHAR2(25) ``` 下列哪三个语句可以成功地...
- Oracle支持多种多表插入方式,包括使用`INSERT ALL`、`INSERT FIRST`等语法。 - 示例:创建一个表`t`,并插入一些初始数据。 ```sql SQL> CREATE TABLE t (x NUMBER(10), y VARCHAR2(10)); SQL> INSERT ...
题目提供了EMPLOYEES表的结构,包括EMPLOYEE_ID作为主键,以及FIRST_NAME和LAST_NAME两个字段,并要求识别出能够成功插入一行数据的SQL语句。 **选项分析**: - **A. INSERT INTO employees VALUES(NULL,'John','...
- 示例: `select first_name || ' ' || last_name as full_name from employees;` ##### 5.9 Where 查询条件子句 - **条件过滤**: 使用 `where` 子句。 - 示例: `select * from employees where salary > 5000;`...
本文将详细介绍如何利用Oracle数据库中的条件 `INSERT ALL` 和 `INSERT FIRST` 语句进行高效的数据插入操作,并通过具体的例子来说明这两种方法的使用场景及注意事项。 #### 一、条件 INSERT ALL 条件 `INSERT ALL...
6. **ALL_ROWS 和 FIRST_ROWS(n)**:这两个Hint影响优化器的目标。`ALL_ROWS`倾向于获取所有行,而`FIRST_ROWS(n)`则优先考虑前n行的获取速度。 7. **USE_NL, USE_MJ, USE_HASH**:这些Hint强制优化器使用特定的...
- INSERT ALL和INSERT FIRST语句允许在单个INSERT语句中为多个表插入数据,根据条件决定数据去向。 - 这对于将数据分配到不同的表,比如根据某些属性分组,非常有用。 例如: ```sql INSERT ALL WHEN deptno=10 ...