`
tomotoboy
  • 浏览: 166981 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

oracle:INSERT ALL和INSERT FIRST

阅读更多
关于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.
分享到:
评论

相关推荐

    PostgreSQL多表插入(兼容oracle insert all)

    insert first:对于每一行数据,只插入到第一个when条件成立的表,不继续检查其他条件。 insert all :对于每一行数据,对每一个when条件都进行检查,如果满足条件就执行插入操作。 但是在pg中是不支持该语法的,...

    ORACLE转DB2对照全解

    **注意:** Oracle和DB2中的游标语法类似,但在DB2中,`DECLARE`关键字用于声明游标。 ##### 3.2 UDF和触发器中显式游标的转换 **Oracle:** ```sql CREATE OR REPLACE FUNCTION get_data RETURN NUMBER IS CURSOR...

    oracle advanced sql 高级SQL教程 ORACLE官方教材

    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 ...

    00570 Oracle公司内部数据库培训资料-Les20_Oracle9i对DML和DDL语句的扩展(PPT 21页).ppt

    4. 条件ALL INSERT和有条件的第一INSERT: - 条件ALL INSERT允许根据特定条件插入所有满足条件的行。如果满足条件,则数据同时插入到指定的所有表。 - 条件FIRST INSERT则是在满足条件时,只将数据插入到第一个指定...

    oracle SQL 语句插入数据

    Oracle SQL 是一种强大的数据库查询和编程语言,广泛用于在Oracle数据库管理系统中操作和管理数据。在Oracle中,插入数据到表中的主要语句是`INSERT INTO`,它允许你将新记录添加到已存在的表中。下面我们将深入探讨...

    Java操作Oracle数据库(建表,插数据,删除)

    在本文中,我们将探讨如何使用 Java 操作 Oracle 数据库,包括建表、插入数据和删除数据等操作。 Java 操作 Oracle 数据库的必要条件 在使用 Java 操作 Oracle 数据库之前,需要满足以下几个条件: 1. 安装 ...

    Oracle日期和时间的存储与处理

    Oracle 日期和时间的存储与处理 Oracle 日期和时间的存储与处理是 Oracle Database 11g SQL 开发指南中的重要章节。本章节主要介绍了处理并存储一个特定的日期和时间,包括使用 DATE 类型存储日期和时间、使用...

    Les20_chinese(Oracle公司内部数据库培训资料).pptx

    多表插入有四种类型:无条件的INSERT、有条件的ALL INSERT、有条件的FIRST INSERT和旋转INSERT。 1. **无条件的INSERT ALL**:在满足特定条件时,向所有指定的表中插入数据。例如: ```sql INSERT ALL INTO sal...

    图书:Oracle之SQL实用指南

    1. SQL基础:首先会介绍SQL的基本概念,包括数据类型、表的创建与管理、列和行的操作,以及如何使用DML(Data Manipulation Language)语句,如INSERT、UPDATE和DELETE。 2. 查询语言:详述SELECT语句的用法,包括...

    oracle转DB2 对照

    - **Oracle** 和 **DB2** 都支持异常处理和条件处理。 - Oracle示例: ```sql DECLARE PRAGMA EXCEPTION_INIT(e, -20000); BEGIN -- some code that may raise exception e EXCEPTION WHEN e THEN -- handle...

    ORACLE 合辑

    **带条件的Insertfirst:** - 插入数据到第一个符合条件的表中。 **pivotinginsert(旋转添加):** - 根据某一列的不同值将数据分发到不同的表中。 **使用限制:** - 有些操作可能受到Oracle版本的限制。 #### ...

    SQL_Server,Oracle,DB2数据库SQL语句比较

    根据提供的文件信息,本文将对...以上内容详细地介绍了SQL Server、Oracle和DB2这三种数据库系统在常见SQL操作上的异同。通过这些对比,我们可以更好地理解不同数据库系统的特点,并在实际开发过程中做出更合适的选择。

    oracle SQL语法大全.rar

    Oracle SQL语法大全是一个重要的学习资源,它涵盖了在Oracle数据库管理系统中进行数据查询、操作和管理时所需的各种SQL语句和技巧。SQL(Structured Query Language)是用于与关系型数据库交互的语言,而Oracle作为...

    oracle 认证 007题库

    考察点:在Oracle数据库中使用SQL INSERT语句插入数据行。 题目:考虑以下EMPLOYEES表结构: ``` EMPLOYEE_ID NUMBER PrimaryKey FIRST_NAME VARCHAR2(25) LAST_NAME VARCHAR2(25) ``` 下列哪三个语句可以成功地...

    oracle047课堂笔记2

    - Oracle支持多种多表插入方式,包括使用`INSERT ALL`、`INSERT FIRST`等语法。 - 示例:创建一个表`t`,并插入一些初始数据。 ```sql SQL&gt; CREATE TABLE t (x NUMBER(10), y VARCHAR2(10)); SQL&gt; INSERT ...

    oracle 9i sql 考试试题

    题目提供了EMPLOYEES表的结构,包括EMPLOYEE_ID作为主键,以及FIRST_NAME和LAST_NAME两个字段,并要求识别出能够成功插入一行数据的SQL语句。 **选项分析**: - **A. INSERT INTO employees VALUES(NULL,'John','...

    Oracle数据库学习日记

    - 示例: `select first_name || ' ' || last_name as full_name from employees;` ##### 5.9 Where 查询条件子句 - **条件过滤**: 使用 `where` 子句。 - 示例: `select * from employees where salary &gt; 5000;`...

    SQL写法—数据修改

    本文将详细介绍如何利用Oracle数据库中的条件 `INSERT ALL` 和 `INSERT FIRST` 语句进行高效的数据插入操作,并通过具体的例子来说明这两种方法的使用场景及注意事项。 #### 一、条件 INSERT ALL 条件 `INSERT ALL...

    oracle_hint教程汇总

    6. **ALL_ROWS 和 FIRST_ROWS(n)**:这两个Hint影响优化器的目标。`ALL_ROWS`倾向于获取所有行,而`FIRST_ROWS(n)`则优先考虑前n行的获取速度。 7. **USE_NL, USE_MJ, USE_HASH**:这些Hint强制优化器使用特定的...

    Oracle7-操纵数据.docx

    - INSERT ALL和INSERT FIRST语句允许在单个INSERT语句中为多个表插入数据,根据条件决定数据去向。 - 这对于将数据分配到不同的表,比如根据某些属性分组,非常有用。 例如: ```sql INSERT ALL WHEN deptno=10 ...

Global site tag (gtag.js) - Google Analytics