insert all(oracle MERGE into跟insert all有什么区别)
本文目录
- oracle MERGE into跟insert all有什么区别
- 在Oracle中,通过一个INSERT ALL语句批量插入数据
- **L中的insert all怎么用
- oracle insert into 脚本怎么写
- insert 和insert all的区别
- oracle存储过程 循环判断插入 急!!!!!!!!
- oracle的多表插入
- 用insert 语句同时插入俩个表
oracle MERGE into跟insert all有什么区别
MERGE into 的操作包含了update,和insert操作,如果数据存在就执行update,如果数据不存在就执行insert操作
在Oracle中,通过一个INSERT ALL语句批量插入数据
Oracle:
INSERT ALL
INTO A(field_1,field_2) VALUES (value_1,value_2)
INTO A(field_1,field_2) VALUES (value_3,value_4)
INTO A(field_1,field_2) VALUES (value_5,value_6)
SELECT 1 FROM DUAL;
在Mybatis中使用
《insert id="insertData" parameterType="java.util.List"
useGeneratedKeys="false"》
INSERT ALL
《foreach item="item" index="index" collection="list"》
INTO T_GZL_BZ
(
ID,
JGH,
JGMC,
DW,
JGLX,
BZLB,
JGZWLB,
EDGZL,
ZGGZL,
BZ,
**RBH,
**RXM,
**SJ,
SFSZ
) VALUES
(
#{item.id,jdbcType=VARCHAR},
#{item.teacherId,jdbcType=VARCHAR},
#{item.teacherName,jdbcType=VARCHAR},
#{item.departmentId,jdbcType=VARCHAR},
#{item.teacherType,jdbcType=VARCHAR},
#{item.compilationCategory,jdbcType=VARCHAR},
#{item.jobCategory,jdbcType=VARCHAR},
#{item.ratedWorkload,jdbcType=NUMERIC},
#{item.maxWorkload,jdbcType=NUMERIC},
#{item.remark,jdbcType=VARCHAR},
#{item.creator,jdbcType=VARCHAR},
#{item.creatorName,jdbcType=VARCHAR},
#{item.createTime,jdbcType=DATE},
#{item.settings,jdbcType=VARCHAR}
)
《/foreach》
SELECT 1 FROM DUAL
《/insert》
mapper:
/**
* @param createList
* @return
*/
int insertData(@Param("list") List《WorkloadStandardDto》 createList);
**L中的insert all怎么用
标准**L中是没有insert all的,每个insert语句只能插入一行,并且每个insert语句只能对一张表执行插入数据操作。
oracle insert into 脚本怎么写
INSERT INTO BOOK(bookid,name,price) VALUES(’100123’,’oracle ’,54);
或者
INSERT INTO tablename(bookid,name,price)
SELECT ’100123’,’oracle,54 FROM DUAL;
总结下Oracle 中的Insert用法
1.标准Insert --单表单行插入
语法:
INSERT INTO table VALUE (value1,value2,...)
例子:
insert into dep (dep_id,dep_name) values(1,’技术部’);
2, 无条件 Insert all --多表多行插入
语法:
INSERT
(subquery)
示例:
INSERT ALL
INTO sal_history(emp_id,hire_date,salary) values (empid,hiredate,sal)
INTO mgr_history(emp_id,manager_id,salary) values (empid,hiredate,sal)
SELECT employee_id empid,hire_date hiredate,salary sal,manager_id mgr
FROM employees
WHERE employee_id》200;
3,有条件的Insert
语法:
INSERT
WHEN condition THEN insert_into_clause values_clause
......
Subquery;
示例:
Insert All
when id》5 then into z_test1(id, name) values(id,name)
when id《》2 then into z_test2(id) values(id)
else into z_test3 values(name)
select id,name from z_test;
4, 旋转Insert (pivoting insert)
create table sales_source_data (
employee_id number(6),
week_id number(2),
sales_mon number(8,2),
sales_tue number(8,2),
sales_wed number(8,2),
sales_thur number(8,2),
sales_fri number(8,2)
);
insert into sales_source_data values (176,6,2000,3000,4000,5000,6000);
create table sales_info (
employee_id number(6),
week number(2),
sales number(8,2)
);
示例如下:
insert all
into sales_info values(employee_id,week_id,sales_mon)
into sales_info values(employee_id,week_id,sales_tue)
into sales_info values(employee_id,week_id,sales_wed)
into sales_info values(employee_id,week_id,sales_thur)
into sales_info values(employee_id,week_id,sales_fri)
select employee_id,week_id,sales_mon,sales_tue,
sales_wed,sales_thur,sales_fri
from sales_source_data;
insert 和insert all的区别
insert into 表X select......
一般使用在X的字段和后面select查询出来的结果集字段一样多,并且在数据库中X表字段的顺序、类型和结果集一致
如:X表(id,name,age)
那么select语句最好写成
select id,name,age form XXXX where .....;
如果字段名不一样,可以使用别名;
如:XXXX(sid,sname,sage)
insert into 表X select sid id ,sname name,sage age form XXXX where .....;
最好自己建2张表多练习练习,自己也容易记住
oracle存储过程 循环判断插入 急!!!!!!!!
不需要两个游标。
把查出来的内容 放到一起,吧type 放到一起, 平且排序
然后再根据type 依次插入,游标中,进行if逻辑判断就可以了。
oracle的多表插入
在业务处理过程中 经常会碰到将业务数据按照条件分别插入不同的数据表的问题 按照传统的处理方式 需要分条件执行多次检索后分别插入不同的表单 这样因为执行了重复的检索造成cpu和内存的浪费 从oracle i开始引入了insert all关键字支持将某张表的数据同时插入多张表单 语法如下
Insert all Insert_into_clause subquery;
Insert conditional_insert_clause subquery;
如上所示 insert_into_clause用于指定insert子句 value clause用于指定值子句 subquery用于指定提供数据的子查询 condition_insert_clause用于指定insert条件子句
当使用all操作符执行多表插入时 在每个条件子句上都要执行into子句后的子查询 并且条件中使用的列必须在插入和子查询的结果集中
创建测试用表
createtable tdate(
idvarchar ( )
namevarchar ( )
birthday datedefaultsysdate
);
插入数据
insertinto tdate values( zhangsan to_date( YYYY MM DD ));
insertinto tdate values( zhangsan to_date( YYYY MM DD ));
insertinto tdate values( lisi to_date( YYYY MM DD ));
insertinto tdate values( wangwu default);
insertinto tdate(id name) values( zhangsan );
mit;
创建接收用测试表
createtable tdate asselect * from tdate where = ;
createtable tdate asselect * from tdate where = ;
mit;
使用all关键字执行多表插入操作
insertall
when birthday 》 月 theninto tdate
when birthday 《 月 theninto tdate
whenname = zhangsan theninto tdate
whenname = lisi theninto tdate
select * from tdate;
在上述操作语句中 如果原表tdate中存在既满足birthday 》 月 又满足name = zhangsan 的数据 那么将执行两次插入 而使用first关键字就可以避免这个问题 使用first关键字时 如果有记录已经满足先前条件 并且已经 *** 入到某个表单中(未必非要是同一个表) 那么该行数据在后续插入中将不会被再次使用 也就是说使用first关键字 原表每行数据按照执行顺序只会 *** 入一次
insertfirst
when birthday 》 月 theninto tdate
when birthday 《 月 theninto tdate
whenname = zhangsan theninto tdate
whenname = lisi theninto tdate
lishixinzhi/Article/program/Oracle/201311/18168用insert 语句同时插入俩个表
INSERT
插入多个表中
在以前的版本中,如果想插入多个表中,需要使用多条INSERT语句,9I开始可以用一条INSERT语句实现向多个表中插入数据.
INSERT
(subquery)
其中conditional_insert_clause如下:
上面的语法说明其实包含了两种情况
》无条件
》有条件,所以后面的conditional_insert_clasue里出现的是分属两种情形下的
举例就很容易理解了
无条件INSERT ALL
INSERT ALL
INTO sal_history VALUES(EMPID,HIREDATE,SAL)
INTO mgr_history VALUES(EMPID,MGR,SAL)
SELECT employee_id EMPID,hire_date HIREDATE,salary SAL,manager_id MGR
FROM employees
WHERE employee_id》200;
因为没有附加限制于检索出的记录,所以所有检索返回数据讲根据其列名插入相应的表中.
有条件的INSERT ALL
INSERT ALL
WHEN SAL》10000 THEN
INTO sal_history VALUES(EMPID,HIREDATE,SAL)
WHEN MGR》200 THEN
INTO mgr_history VALUES(EMPID,MGR,SAL)
SELECT employee_id EMPID,hire_date HIREDATE,salary SAL,manager_id MGR
FROM employees
WHERE employee_id》200;
这里就将比较了,返回记录将比较其SAL,如果大于10000则插入SAL_HISTORY,同理,MGR大于200的记录将插入MGR_HISTORY表.其余都将丢弃.
有条件的FIRST INSERT
FIRST与ALL的区别在于当遇到第一个求值为TRUE的子句之后停止对WHEN子句求值,而ALL不论是否求值为TRUE.
INSERT FIRST
WHEN SAL》25000 THEN
INTO special_sal VALUES(DEPTID,SAL)
WHEN HIREDATE like (’%00%’) THEN
INTO hiredate_history_00 VALUES(DEPTID,HIREDATE)
WHEN HIREDATE like (’%99%’) THEN
INTO hiredate_history_99 VALUES(DEPTID,HIREDATE)
ELSE
INTO hiredate_history VALUES(DEPTID,HIREDATE)
SELECT department_id DEPTID,SUM(salary) SAL,
MAX(hire_date) HIREDATE
FROM employees
GROUP BY department_id;
上例中如果第一个WHEN子句求值为TRUE则其后的WHEN子句将不会被执行,反之将直到遇到第一个满足条件的子句执行为止.
本文相关文章:
bottom up的意思(质谱的bottom up和top down 有什么区别)
2026年4月13日 01:00
电脑自带数据库管理系统吗(数据库,数据库系统,数据库管理系统这三个概念有什么区别操作系统是不是自带数据库的啊)
2026年4月10日 08:00
eclipse和my eclipse的区别(eclipse和 my eclipse 有什么区别)
2026年4月8日 16:00
**ile全飞秒(全飞秒**ile3.0和其他近视手术方式有什么区别)
2026年4月7日 22:40
fedora是linux社区发行版吗(fedora linux和linux有什么区别)
2026年4月7日 01:20
c***tantly和continuously的区别(continually continuously的区别是什么)
2026年3月30日 02:00
security词性转换(“safety“和“security“都指安全,有什么区别是不是一个是财产安全,一个是人身安全)
2026年3月29日 17:20
电脑网页和手机网页的区别(手机访问网站 和电脑访问有什么区别)
2026年3月28日 18:40
stripe手续费(跨境收款选Airwallex空中云汇还是stripe)
2026年3月28日 03:00
更多文章:
学ps的软件(电脑ps处理,哪个软件最好用(电脑常用的ps软件))
2026年4月14日 09:20
个人主页带位置视频未达标怎么弄(我王者荣耀位置按了定位位置的按钮为什么我的个人主页还是显示的暂未)
2026年4月14日 09:00
session timeout什么意思(Session+Timeout是什么意思)
2026年4月14日 08:40
电脑启动program是什么(program启动项有什么用)
2026年4月14日 08:20
警告 did you mean strncmp(Linux mintcommand ’sudu’ not found,具体看图)
2026年4月14日 08:00
js将字符串转化为date(怎么用JS将字符串转成日期Date类型)
2026年4月14日 07:00
insert all(oracle MERGE into跟insert all有什么区别)
2026年4月14日 06:40
oracle11g端口映射客户端频繁掉线(oracle 11g 客户端 sqlplus问题)
2026年4月14日 06:20


