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;
分享到:
相关推荐
在oracle中我们可以使用insert all或者insert first语句,两者语法基本一致,区别在于: insert first:对于每一行数据,只插入到第一个when条件成立的表,不继续检查其他条件。 insert all :对于每一行数据,对每...
2008年Jolt大奖得主,经典的Head First系列,相信曾经读过Head First Design Pattern的朋友都深有感触。有别于传统的计算机类教科书,Head First系列中图画多,文字少,知识都贯穿在一个情境里面,读起来非常轻松。...
### SQL写法——数据修改:条件 INSERT ALL 与 INSERT FIRST 在数据库操作中,SQL(Structured Query Language)作为处理关系型数据库的标准语言,其功能强大且应用广泛。本文将详细介绍如何利用Oracle数据库中的...
FORALL则是在已经收集了数据的集合上执行DML(数据操纵语言)操作,如INSERT、UPDATE或DELETE,可以一次性处理集合中的多条记录,避免循环中的单条处理。例如: ```sql FORALL i IN quotes.FIRST..quotes.LAST ...
提供简化的查询方法,例如fetch_all / fetch_row / fetch_column / fetch_first 提供简化的方法,例如insert / insert_many / update / delete 1.创建pymysql连接 import pymysql from pymysql_manager import ...
2008年Jolt大奖得主,经典的Head First系列,相信曾经读过Head First Design Pattern的朋友都深有感触。有别于传统的计算机类教科书,Head First系列中图画多,文字少,知识都贯穿在一个情境里面,读起来非常轻松。...
- INSERT ALL和INSERT FIRST语句允许在单个INSERT语句中为多个表插入数据,根据条件决定数据去向。 - 这对于将数据分配到不同的表,比如根据某些属性分组,非常有用。 例如: ```sql INSERT ALL WHEN deptno=10 ...
《Head First SQL》是学习SQL的优秀教材,其内容涵盖了数据库的基本操作,包括创建、删除数据库和表,以及对表的修改、索引的管理、查询和数据的插入等。以下是对这些知识点的详细解析: 1. **创建数据库**: 使用...
命令:grant all privileges on first.* to test@localhost identified by “123456”; 当你执行完这个命令以后,只要你再以用户名:test,密码:123456登录时你就只可以对first这个数据库操作,这样避开使用root ...
// 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...
在执行DML操作(如INSERT、UPDATE或DELETE)时,可以使用RETURNING INTO结合BULK COLLECT来收集返回的值。例如,在删除特定部门员工时,同时获取被删除员工的ID和姓名: ```sql CREATE TABLE emp AS SELECT * ...
#### 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 ...
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
多表插入有四种类型:无条件的INSERT、有条件的ALL INSERT、有条件的FIRST INSERT和旋转INSERT。 1. **无条件的INSERT ALL**:在满足特定条件时,向所有指定的表中插入数据。例如: ```sql INSERT ALL INTO sal...
- <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" /> ...
3. 使用 CBO(Cost-Based Optimizer):在初始化参数中设置 optimizer_mode=choose/all_rows/first_row 二、SQL 优化 4. 定位重要的 SQL:根据 v$sqlarea 中的逻辑读 /disk_read 寻找 CPU 使用过量的 session 5. ...
安装时可以根据这位大佬的帖子进行...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, 基于以下文章代码迭代修改实现: ...rank_ecpm_v1~rank_v31_ecpm-2-120967535-null-null.142^v88^control_2,239^v2^insert_chatgpt&utm_term=tdms%20qt%20c
你也可以一次插入多行数据,使用`INSERT ALL`语句: ```sql INSERT ALL INTO Employees (ID, Name, Salary) VALUES (1001, '张三', 5000) INTO Employees (ID, Name, Salary) VALUES (1002, '李四', 6000) SELECT...
- Oracle7引入了ALL和FIRST操作符,允许在一条INSERT语句中为多个表插入数据。 - ALL操作符根据条件将数据分发到不同的表,例如按部门编号分配到不同部门的表。 - FIRST操作符类似,但首先处理满足条件的行。 2....