oracle插入多表(insert all/first)
1、建测试表
- CREATE TABLE EDW_INT
- (
- AGMT_NO VARCHAR2(40 BYTE) NOT NULL,
- AGMT_SUB_NO VARCHAR2(4 BYTE) NOT NULL,
- NEED_REPAY_INT NUMBER(22,2),
- CURR_PERIOD NUMBER(4) NOT NULL
- );
- CREATE TABLE EDW_INT_1
- (
- AGMT_NO VARCHAR2(40 BYTE) NOT NULL,
- AGMT_SUB_NO VARCHAR2(4 BYTE) NOT NULL,
- NEED_REPAY_INT NUMBER(22,2),
- CURR_PERIOD NUMBER(4) NOT NULL
- );
- CREATE TABLE EDW_INT_2
- (
- AGMT_NO VARCHAR2(40 BYTE) NOT NULL,
- AGMT_SUB_NO VARCHAR2(4 BYTE) NOT NULL,
- NEED_REPAY_INT NUMBER(22,2),
- CURR_PERIOD NUMBER(4) NOT NULL
- );
2、插入测试数据
- INSERT INTO EDW_INT
- (AGMT_NO, AGMT_SUB_NO, NEED_REPAY_INT, CURR_PERIOD)
- VALUES
- ('20003874', '2104', 3126.5, 7);
- INSERT INTO EDW_INT
- (AGMT_NO, AGMT_SUB_NO, NEED_REPAY_INT, CURR_PERIOD)
- VALUES
- ('20003874', '2104', 3290.76, 6);
- INSERT INTO EDW_INT
- (AGMT_NO, AGMT_SUB_NO, NEED_REPAY_INT, CURR_PERIOD)
- VALUES
- ('20003874', '2104', 3454.06, 5);
- INSERT INTO EDW_INT
- (AGMT_NO, AGMT_SUB_NO, NEED_REPAY_INT, CURR_PERIOD)
- VALUES
- ('20003874', '2104', 3616.41, 4);
- INSERT INTO EDW_INT
- (AGMT_NO, AGMT_SUB_NO, NEED_REPAY_INT, CURR_PERIOD)
- VALUES
- ('20017143', '2104', 2350.86, 0);
- INSERT INTO EDW_INT
- (AGMT_NO, AGMT_SUB_NO, NEED_REPAY_INT, CURR_PERIOD)
- VALUES
- ('20017143', '2104', 3566.55, 0);
- INSERT INTO EDW_INT
- (AGMT_NO, AGMT_SUB_NO, NEED_REPAY_INT, CURR_PERIOD)
- VALUES
- ('20018273', '2104', 1639.46, 0);
- INSERT INTO EDW_INT
- (AGMT_NO, AGMT_SUB_NO, NEED_REPAY_INT, CURR_PERIOD)
- VALUES
- ('20018273', '2104', 2080.49, 0);
- COMMIT;
3、insert all/first语句示例
(1)、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;
- commit;
(2)、insert all-带条件
- insert all
- when curr_period=0 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;
(3)、insert first-带条件
- insert first
- when curr_period=0 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;
4、数据结果查看
- truncate table edw_int_1;
- truncate table edw_int_2;
- select * from edw_int;
- select * from edw_int_1;
- select * from edw_int_2;
5、all与first的区别
all:不考虑先后关系,只要满足条件,就全部插入;
first:考虑先后关系,如果有数据满足第一个when条件又满足第二个when条件,则执行第一个then插入语句,第二个then就不插入第一个then已经插入过的数据了。
其区别也可描述为,all只要满足条件,可能会作重复插入;first首先要满足条件,然后筛选,不做重复插入。
6、利用insert all实现行列转换(insert all的旋转功能)
- 1、建一行多列表及测试数据插入
- 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;
- 2、建少列多行表
- create table week_bal_new(id int,week int,bal number);
- 3、利用insert all语句插入
- 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)
- into week_bal_new(id,week,bal)values(id,5,w5_bal)
- select id,w1_bal,w2_bal,w3_bal,w4_bal,w5_bal from week_bal;
- select * from week_bal_new;
oracle插入多表(insert all/first)的更多相关文章
- oracle 把查询结果插入到表中几种方式
转载:Oracle中把一个查询结果插入到一张表中 以下是信息留存: 一.Oracle数据库中,把一张表的查询结果直接生成并导入一张新表中. 例如:现有只有A表,查询A表,并且把结果导入B表中.使用如下 ...
- oracle 插入表数据的4种方式
1.往表中插入一整行数据 /*方法一*/ INSERT INTO 表名 VALUES(val1,val2,val3,...); /*方法二*/ '; 如: ,, FROM DUAL; 注意: 2. ...
- Oracle插入(insert into)
Oracle插入(insert into) 转载:http://www.oraclejsq.com/article/010100199.html Oracle对表数据的插入是使用insert命令来执行 ...
- 问题:oracle select into;结果:oracle SELECT INTO 和 INSERT INTO SELECT 两种表复制语句详解
oracle SELECT INTO 和 INSERT INTO SELECT 两种表复制语句详解 (2011-07-08 08:59:47) 转载▼ 标签: it 分类: oracle 我们经常会遇 ...
- oracle数据库【表复制】insert into select from跟create table as select * from 两种表复制语句区别
create table as select * from和insert into select from两种表复制语句区别 create table targer_table as select ...
- 定时从远程的数据库中取数据,然后把取出来的数据插入或更新本地的oracle数据库的表
最近项目中有一种需求: 大致需求是这样的 通过给定的 用户名和密码 要定时从远程的数据库中取数据,然后把取出来的数据插入或更新本地的oracle数据库的表 项目的结构式struts1 hibernat ...
- oracle SELECT INTO 和 INSERT INTO SELECT 两种表复制语句详解
我们经常会遇到需要表复制的情况,如将一个table1的数据的部分字段复制到table2中,或者将整个table1复制到table2中,这时候我们就要使用SELECT INTO 和 INSERT INT ...
- 向oracle中的表插入数据的方法
向oracle中的表插入数据的方法有以下几种: 假设表名为User 第一种方法:select t.*,rowid from User t;-->点击钥匙那个标记就可向表中添加数据 第二种方法:s ...
- Oracle查询一个表的数据插入到另一个表
1. 新增一个表,通过另一个表的结构和数据 create table XTHAME.tab1 as select * from DSKNOW.COMBDVERSION 2. 如果表存在: insert ...
随机推荐
- 为什么linux有足够的内存还进行swap?
1.Linux在内存被用完之前开始交换.这是为了提高性能和响应能力: 性能提高是因为一些内存放磁盘缓存比方内存更合适.因此,最好将一个已经停用了一段时间的程序交换出去,而将经常使用的文件保存在缓存中. ...
- HDU 1995 汉诺塔V (水题)
题意:.. 析:2^n-i 代码如下: #pragma comment(linker, "/STACK:1024000000,1024000000") #include <c ...
- [Swift]有用的Binary Heap Type类
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- 纯javaScript实现元素平滑滚动,改进前两个版本,支持鼠标滚轮滚动和点击元素滚动,滚动更顺畅
windowScroll(id, number, distance, direction, obj) 参数介绍: 1.id:所要滚动的元素id; 2.number:滚动次数; 3.distance:每 ...
- dd 使用记录
使用dd的工具 1)测试写速度 2)测试读速度 3)测试读写速度 dd说明: if是输入文本,of是输出文本,bs是块大小,count是你指定读写块的数量 /dev/zero是从内存里面读取,不会产生 ...
- 最短路之Dijkstra(迪杰斯特拉)
一般用法: Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.Dijkstra算法是很有代 ...
- The 17th Zhejiang University Programming Contest Sponsored by TuSimple J
Knuth-Morris-Pratt Algorithm Time Limit: 1 Second Memory Limit: 65536 KB In computer science, t ...
- Beautiful People SGU - 199 ZOJ - 2319
最长上升子序列O(n log n):http://www.cnblogs.com/hehe54321/p/cf-340d.html 题目:https://cn.vjudge.net/problem/Z ...
- js 获取最后一个字符
方法一: str.charAt(str.length - 1) 方法二: str.subStr(str.length-1,1) 方法三: var str = "123456" ...
- LN : leetcode 516 Longest Palindromic Subsequence
lc 516 Longest Palindromic Subsequence 516 Longest Palindromic Subsequence Given a string s, find th ...