`
honeybinshun
  • 浏览: 61909 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

insert all/first 使用与区别简介

 
阅读更多
insert all与insert first多表插入数据需要注意和说明的地方:
一、针对insert all
只能对表执行多表插入语句,不能对视图或物化视图执行;
不能对远端表执行多表插入语句;
不能使用表集合表达式;
不能超过999个目标列;
在RAC环境中或目标表是索引组织表或目标表上建有BITMAP索引时,多表插入语句不能并行执行;
多表插入语句不支持执行计划稳定性;
多表插入语句中的子查询不能使用序列。
二、insert all与insert first 有条件与无条件的区别
all:不考虑先后关系,只要满足条件,就全部插入;
first:考虑先后关系,如果有数据满足第一个when条件又满足第二个when条件,则执行第一个then插入语句,第二个then就不插入第一个then已经插入过的数据了。
其区别也可描述为,all只要满足条件,可能会作重复插入;first首先要满足条件,然后筛选,不做重复插入
同时,insert all可以实现行列转换功能(insert all的旋转功能)
具体示例,如下:
create table edw_int
( agmt_no varchar2(40) not null,
  agmt_sub_no varchar2(4) not null,
  need_repay_int number(22,2),
  curr_period number(4) not null
);
create table edw_int_2 as select * from edw_int;
insert into edw_int select * from edw_int;
select * from edw_int;
--insert all 不带条件
insert all
into edw_int_1(agmt_no,agmt_sub_no,need_repay_int,curr_period)
values(agmt_no,agmt_sub_no,need_repay_int,curr_period)
into edw_int_2(agmt_no,agmt_sub_no,curr_period)
values(agmt_no,'1234',curr_period)
select agmt_no,agmt_sub_no,need_repay_int,curr_period from edw_int;
select * from edw_int;
select * from edw_int_1;
select * from edw_int_2;
truncate table edw_int_1;
truncate table edw_int_2;
--插入一条测试数据
insert into edw_int values('200012862','2104',1639.04,0);
--insert all 带条件
insert all
when curr_period=2 then
into edw_int_1(agmt_no,agmt_sub_no,need_repay_int,curr_period)
values(agmt_no,agmt_sub_no,need_repay_int,curr_period)
else
into edw_int_2(agmt_no,agmt_sub_no,need_repay_int,curr_period)
values(agmt_no,agmt_sub_no,need_repay_int,curr_period)
select agmt_no,agmt_sub_no,need_repay_int,curr_period from edw_int;
commit;
--insert first  带条件
insert first
when curr_period=7 then
into edw_int_1(agmt_no,agmt_sub_no,need_repay_int,curr_period)
values(agmt_no,agmt_sub_no,need_repay_int,curr_period)
when agmt_sub_no='2104' then
into edw_int_2(agmt_no,agmt_sub_no,need_repay_int,curr_period)
values(agmt_no,agmt_sub_no,need_repay_int,curr_period)
select agmt_no,agmt_sub_no,need_repay_int,curr_period from edw_int;
commit;
----利用insert all 实现行列转换(insert all 的旋转功能)
----建测试表
create table week_bal(id int,w1_bal number,w2_bal number,w3_bal number,w4_bal number,w5_bal number);  
insert into week_bal values(1,10.09,12.98,23.89,89.08,1098.01); 
commit;
select * from week_bal;
create table week_bal_new(id int,week int,bal number);
select * from week_bal_new;
----实现行列转换
insert all
into week_bal_new(id,week,bal)values(id,1,w1_bal)
into week_bal_new(id,week,bal)values(id,2,w2_bal)
into week_bal_new(id,week,bal)values(id,3,w3_bal)
into week_bal_new(id,week,bal)values(id,4,w4_bal)
select id,w1_bal,w2_bal,w3_bal,w4_bal from week_bal;
select * from week_bal_new;





分享到:
评论

相关推荐

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

    在oracle中我们可以使用insert all或者insert first语句,两者语法基本一致,区别在于: insert first:对于每一行数据,只插入到第一个when条件成立的表,不继续检查其他条件。 insert all :对于每一行数据,对每...

    《深入浅出SQL》(Head First SQL)[PDF].part1

    2008年Jolt大奖得主,经典的Head First系列,相信曾经读过Head First Design Pattern的朋友都深有感触。有别于传统的计算机类教科书,Head First系列中图画多,文字少,知识都贯穿在一个情境里面,读起来非常轻松。...

    SQL写法—数据修改

    ### SQL写法——数据修改:条件 INSERT ALL 与 INSERT FIRST 在数据库操作中,SQL(Structured Query Language)作为处理关系型数据库的标准语言,其功能强大且应用广泛。本文将详细介绍如何利用Oracle数据库中的...

    记录 集合 BULK COLLECT FORALL 执行计划

    FORALL则是在已经收集了数据的集合上执行DML(数据操纵语言)操作,如INSERT、UPDATE或DELETE,可以一次性处理集合中的多条记录,避免循环中的单条处理。例如: ```sql FORALL i IN quotes.FIRST..quotes.LAST ...

    pymysql-connection-manager:pymysql连接和池管理器

    提供简化的查询方法,例如fetch_all / fetch_row / fetch_column / fetch_first 提供简化的方法,例如insert / insert_many / update / delete 1.创建pymysql连接 import pymysql from pymysql_manager import ...

    《深入浅出SQL》(Head First SQL)[PDF].part2

    2008年Jolt大奖得主,经典的Head First系列,相信曾经读过Head First Design Pattern的朋友都深有感触。有别于传统的计算机类教科书,Head First系列中图画多,文字少,知识都贯穿在一个情境里面,读起来非常轻松。...

    Oracle7-操纵数据.docx

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

    head_first_SQL总结[文].pdf

    《Head First SQL》是学习SQL的优秀教材,其内容涵盖了数据库的基本操作,包括创建、删除数据库和表,以及对表的修改、索引的管理、查询和数据的插入等。以下是对这些知识点的详细解析: 1. **创建数据库**: 使用...

    mysql-connector-java-commercial-5.1.30-bin.jar

    命令:grant all privileges on first.* to test@localhost identified by “123456”; 当你执行完这个命令以后,只要你再以用户名:test,密码:123456登录时你就只可以对first这个数据库操作,这样避开使用root ...

    一个跨平台的CString源码

    // afx.h or atlbase.h first, as appropriate. // // PEOPLE WHO HAVE CONTRIBUTED TO THIS CLASS: // // Several people have helped me iron out problems and othewise improve // this class. OK, this is a...

    浅谈PL/SQL批处理语句:BULK COLLECT与FORALL对优化做出的贡献

    在执行DML操作(如INSERT、UPDATE或DELETE)时,可以使用RETURNING INTO结合BULK COLLECT来收集返回的值。例如,在删除特定部门员工时,同时获取被删除员工的ID和姓名: ```sql CREATE TABLE emp AS SELECT * ...

    PLSQL笔记(EFRIOO&GUOH)1.doc

    #### 7.13.5 在 FORALL 语句上使用 INDICES OF 子句 ```sql FORALL i IN INDICES OF v_employees INSERT INTO employees (employee_id) VALUES (v_employees(i)); ``` #### 7.13.6 在 FORALL 语句上使用 VALUES ...

    GStyleButtonSampleDemo.zip

    https://blog.csdn.net/weixin_43699716/article/details/115272055?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161715384316780255228737%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=161715384316780255228737&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first...rank_v2~rank_v29-2-115272055.pc_search_result_hbase_insert&utm_term=GStyleButton

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

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

    .net 各种实用方法

    - <member name="M:Pic_Chart_Load.UpLoad_data_Insert.Return_Arr_OneS_data_by_DataGridView(System.Windows.Forms.DataGridView)"> 拼接DataGridView,返回ArrayList 数组</summary> <param name="dgv" /> ...

    DBA面试题宝典借鉴.pdf

    3. 使用 CBO(Cost-Based Optimizer):在初始化参数中设置 optimizer_mode=choose/all_rows/first_row 二、SQL 优化 4. 定位重要的 SQL:根据 v$sqlarea 中的逻辑读 /disk_read 寻找 CPU 使用过量的 session 5. ...

    AutoDockTools安装包 mgltools-Linux-x86-64-1.5.6-install

    安装时可以根据这位大佬的帖子进行...rank_ecpm_v1~rank_v31_ecpm-2-122718116-null-null.142^v88^control_2,239^v2^insert_chatgpt&utm_term=autodocktools1.5.6%20%E5%AE%89%E8%A3%85&spm=1018.2226.3001.41

    基于nilibddc.dll,在QtC++中实现tdmsReader和tdmsWriter

    基于nilibddc.dll,在QtC++中实现tdmsReader和tdmsWriter, 基于以下文章代码迭代修改实现: ...rank_ecpm_v1~rank_v31_ecpm-2-120967535-null-null.142^v88^control_2,239^v2^insert_chatgpt&utm_term=tdms%20qt%20c

    oracle SQL 语句插入数据

    你也可以一次插入多行数据,使用`INSERT ALL`语句: ```sql INSERT ALL INTO Employees (ID, Name, Salary) VALUES (1001, '张三', 5000) INTO Employees (ID, Name, Salary) VALUES (1002, '李四', 6000) SELECT...

    Oracle7-操纵数据.pdf

    - Oracle7引入了ALL和FIRST操作符,允许在一条INSERT语句中为多个表插入数据。 - ALL操作符根据条件将数据分发到不同的表,例如按部门编号分配到不同部门的表。 - FIRST操作符类似,但首先处理满足条件的行。 2....

Global site tag (gtag.js) - Google Analytics