- 浏览: 328732 次
- 性别:
- 来自: 深圳
-
文章分类
最新评论
-
crxiang:
写得很好啊,最近正好需要这个,谢谢分享了!
Android中ProgressDialog的简单示例 -
shangs2010:
分析的真仔细,多谢!
SharePreference类似于JavaEE中的session -
guochongcan:
fantaxy025025 写道兄弟,你这个不行的。
只能删 ...
MYSQL用一条SQL语句删除重复记录 -
fantaxy025025:
兄弟,你这个不行的。只能删除 重复个数是2的,如果重复个数大于 ...
MYSQL用一条SQL语句删除重复记录 -
wujiandong:
不错,多写点这方面的东西~~,加油~~,哥们~~
布局学习——妙用TabHost
Oracle9i引入了MERGE命令,你能够在一个SQL语句中对一个表同时执行inserts和updates操作. MERGE命令从一个或多个数据源中选择行来updating或inserting到一个或多个表.在Oracle 10g中MERGE有如下一些改进:
1、UPDATE或INSERT子句是可选的
2、UPDATE和INSERT子句可以加WHERE子句
3、在ON条件中使用常量过滤谓词来insert所有的行到目标表中,不需要连接源表和目标表
4、UPDATE子句后面可以跟DELETE子句来去除一些不需要的行
首先创建示例表:
create table PRODUCTS
(
PRODUCT_ID INTEGER,
PRODUCT_NAME VARCHAR2(60),
CATEGORY VARCHAR2(60)
);
insert into PRODUCTS values (1501, 'VIVITAR 35MM', 'ELECTRNCS');
insert into PRODUCTS values (1502, 'OLYMPUS IS50', 'ELECTRNCS');
insert into PRODUCTS values (1600, 'PLAY GYM', 'TOYS');
insert into PRODUCTS values (1601, 'LAMAZE', 'TOYS');
insert into PRODUCTS values (1666, 'HARRY POTTER', 'DVD');
commit;
create table NEWPRODUCTS
(
PRODUCT_ID INTEGER,
PRODUCT_NAME VARCHAR2(60),
CATEGORY VARCHAR2(60)
);
insert into NEWPRODUCTS values (1502, 'OLYMPUS CAMERA', 'ELECTRNCS');
insert into NEWPRODUCTS values (1601, 'LAMAZE', 'TOYS');
insert into NEWPRODUCTS values (1666, 'HARRY POTTER', 'TOYS');
insert into NEWPRODUCTS values (1700, 'WAIT INTERFACE', 'BOOKS');
commit;
1、可省略的UPDATE或INSERT子句
在Oracle 9i, MERGE语句要求你必须同时指定INSERT和UPDATE子句.而在Oracle 10g, 你可以省略UPDATE或INSERT子句中的一个. 下面的例子根据表NEWPRODUCTS的PRODUCT_ID字段是否匹配来updates表PRODUCTS的信息:
SQL> MERGE INTO products p
2 USING newproducts np
3 ON (p.product_id = np.product_id)
4 WHEN MATCHED THEN
5 UPDATE
6 SET p.product_name = np.product_name,
7 p.category = np.category;
3 rows merged.
SQL> SELECT * FROM products;
PRODUCT_ID PRODUCT_NAME CATEGORY
---------- -------------------- ----------
1501 VIVITAR 35MM ELECTRNCS
1502 OLYMPUS CAMERA ELECTRNCS
1600 PLAY GYM TOYS
1601 LAMAZE TOYS
1666 HARRY POTTER TOYS
SQL>
SQL> ROLLBACK;
Rollback complete.
SQL>
在上面例子中, MERGE语句影响到是产品id为1502, 1601和1666的行. 它们的产品名字和种 类被更新为表newproducts中的值. 下面例子省略UPDATE子句, 把表NEWPRODUCTS中新的PRODUCT_ID插入到表PRODUCTS中, 对于在两个表中能够匹配上PRODUCT_ID的数据不作任何处理. 从这个例子你能看到PRODUCT_ID=1700的行被插入到表PRODUCTS中.
SQL> MERGE INTO products p
2 USING newproducts np
3 ON (p.product_id = np.product_id)
4 WHEN NOT MATCHED THEN
5 INSERT
6 VALUES (np.product_id, np.product_name,
7 np.category);
1 row merged.
SQL> SELECT * FROM products;
PRODUCT_ID PRODUCT_NAME CATEGORY
---------- -------------------- ----------
1501 VIVITAR 35MM ELECTRNCS
1502 OLYMPUS IS50 ELECTRNCS
1600 PLAY GYM TOYS
1601 LAMAZE TOYS
1666 HARRY POTTER DVD
1700 WAIT INTERFACE BOOKS
2、带条件的Updates和Inserts子句
你能够添加WHERE子句到UPDATE或INSERT子句中去, 来跳过update或insert操作对某些行的处理. 下面例子根据表NEWPRODUCTS来更新表PRODUCTS数据, 但必须字段CATEGORY也得同时匹配上:
SQL> MERGE INTO products p
2 USING newproducts np
3 ON (p.product_id = np.product_id)
4 WHEN MATCHED THEN
5 UPDATE
6 SET p.product_name = np.product_name
7 WHERE p.category = np.category;
2 rows merged.
SQL> SELECT * FROM products;
PRODUCT_ID PRODUCT_NAME CATEGORY
---------- -------------------- ----------
1501 VIVITAR 35MM ELECTRNCS
1502 OLYMPUS CAMERA ELECTRNCS
1600 PLAY GYM TOYS
1601 LAMAZE TOYS
1666 HARRY POTTER DVD
SQL>
SQL> rollback;
在这个例子中, 产品ID为1502,1601和1666匹配ON条件但是1666的category不匹配. 因此MERGE命令只更新两行数据. 下面例子展示了在Updates和Inserts子句都使用WHERE子句:
SQL> MERGE INTO products p
2 USING newproducts np
3 ON (p.product_id = np.product_id)
4 WHEN MATCHED THEN
5 UPDATE
6 SET p.product_name = np.product_name,
7 p.category = np.category
8 WHERE p.category = 'DVD'
9 WHEN NOT MATCHED THEN
10 INSERT
11 VALUES (np.product_id, np.product_name, np.category)
12 WHERE np.category != 'BOOKS'
SQL> /
1 row merged.
SQL> SELECT * FROM products;
PRODUCT_ID PRODUCT_NAME CATEGORY
---------- -------------------- ----------
1501 VIVITAR 35MM ELECTRNCS
1502 OLYMPUS IS50 ELECTRNCS
1600 PLAY GYM TOYS
1601 LAMAZE TOYS
1666 HARRY POTTER TOYS
SQL>
注意由于有WHERE子句INSERT没有插入所有不匹配ON条件的行到表PRODUCTS.
3、无条件的Inserts
你能够不用连接源表和目标表就把源表的数据插入到目标表中. 这对于你想插入所有行到目标表时是非常有用的. Oracle 10g现在支持在ON条件中使用常量过滤谓词. 举个常量过滤谓词例子ON (1=0). 下面例子从源表插入行到表PRODUCTS, 不检查这些行是否在表PRODUCTS中存在:
SQL> MERGE INTO products p
2 USING newproducts np
3 ON (1=0)
4 WHEN NOT MATCHED THEN
5 INSERT
6 VALUES (np.product_id, np.product_name, np.category)
7 WHERE np.category = 'BOOKS'
SQL> /
1 row merged.
SQL> SELECT * FROM products;
PRODUCT_ID PRODUCT_NAME CATEGORY
---------- -------------------- ----------
1501 VIVITAR 35MM ELECTRNCS
1502 OLYMPUS IS50 ELECTRNCS
1600 PLAY GYM TOYS
1601 LAMAZE TOYS
1666 HARRY POTTER DVD
1700 WAIT INTERFACE BOOKS
6 rows selected.
SQL>
4、新增加的DELETE子句
Oracle 10g中的MERGE提供了在执行数据操作时清除行的选项. 你能够在WHEN MATCHED THEN UPDATE子句中包含DELETE子句. DELETE子句必须有一个WHERE条件来删除匹配某些条件的行.匹配DELETE WHERE条件但不匹配ON条件的行不会被从表中删除.
下面例子验证DELETE子句. 我们从表NEWPRODUCTS中合并行到表PRODUCTS中, 但删除category为ELECTRNCS的行.
SQL> MERGE INTO products p
2 USING newproducts np
3 ON (p.product_id = np.product_id)
4 WHEN MATCHED THEN
5 UPDATE
6 SET p.product_name = np.product_name,
7 p.category = np.category
8 DELETE WHERE (p.category = 'ELECTRNCS')
9 WHEN NOT MATCHED THEN
10 INSERT
11 VALUES (np.product_id, np.product_name, np.category)
SQL> /
4 rows merged.
SQL> SELECT * FROM products;
PRODUCT_ID PRODUCT_NAME CATEGORY
---------- -------------------- ----------
1501 VIVITAR 35MM ELECTRNCS
1600 PLAY GYM TOYS
1601 LAMAZE TOYS
1666 HARRY POTTER TOYS
1700 WAIT INTERFACE BOOKS
SQL>
产品ID为1502的行从表PRODUCTS中被删除, 因为它同时匹配ON条件和DELETE WHERE条件. 产品ID为1501的行匹配DELETE WHERE条件但不匹配ON条件, 所以它没有被删除. 产品ID为1700 的行不匹配ON条件, 所以被插入表PRODUCTS. 产品ID为1601和1666的行匹配ON条件但不匹配DELETE WHERE条件, 所以被更新为表NEWPRODUCTS中的值.
发表评论
-
Oracle Net Services Configuration 百度网盘下载地址
2021-03-05 11:40 645最近在一台32位的CentOS 6.2机器上安装Oracle ... -
ORACLE 如何产生一个随机数
2020-04-07 14:24 461http://blog.csdn.net/jie8991/ar ... -
Oracle PL SQL将金额数字转换成大写
2020-04-03 17:01 922原文地址: http://blog.sina.com.cn/s ... -
SQL/Oracle 两表关联更新
2019-02-21 16:10 439update info_1 a set (a.cname,a. ... -
ETL简介
2019-02-14 11:15 5191、ETL的定义 ETL分别是“Extract”、“ Tra ... -
Oracle 增加修改删除字段
2018-09-15 11:48 2440添加字段的语法:alter table tablen ... -
Oracle trunc()函数的用法
2018-09-15 11:26 6521.TRUNC(for dates) TRUNC函数为 ... -
ORACLE 日期加减操作
2018-08-10 16:25 698无论是DATE还是timestamp都可以进行加减操作。可以 ... -
SQL 循环执行及间隔多长时间后执行
2016-02-18 14:09 2092xxx ------------------ ... -
Oracle job用法小结
2015-12-15 11:52 7541.查询job信息select * from ... -
Oracle 归档日志模式切换及手工归档
2015-12-08 16:06 20391.非归档到归档模式 --查看数据库是 ... -
Oracle RMAN 清除归档日志
2015-12-08 13:07 1315清除归档日志的 ... -
默认路径存储归档文件最多2G
2015-12-05 19:29 814Oracle 开启归档之后,由于归档默认路径存储 ... -
ORA-00257: archiver error. Connect internal only, until freed.
2015-12-05 19:22 0Oracle 开启归档之后,由于归档默认路径存储 ... -
触发器 REFERENCING OLD AS OLD
2015-07-07 20:34 10370REFERENCING OLD AS OLD NEW ... -
无法正常启动数据库
2015-07-07 10:04 966无法正常启动数据库,先用mount 状态启动, ... -
Oracle修改表空间大小
2015-06-02 10:30 905Oracle表空间限制,导致无法继续导入数据的原因。 如 ... -
如何启用Oracle10g闪回数据库
2015-01-28 15:55 961配置闪回数据库可按以下步骤配置闪回数据库:(确保数据库处于A ... -
Oracle如何创建跨用户视图
2015-01-23 10:51 4046Oracle同一个实例下有两个用户A和B。 ... -
恢复备份文件后,无法正常启动数据库
2015-01-22 23:21 1013控制文件损坏,需从备份文件中恢复, 但将备份文件恢 ...
相关推荐
Araxis Merge是一款比对软件工具,不仅支持单个文件的比对,而且支持对两个文件夹的所有文件进行对比,并实时修改。用了蛮久感觉很好用,所以分享给大家。 里面给大家内嵌了Araxis Merge v6.5和Araxis Merge 2017两...
标题“MergeList_Sq.zip_MergeList Sq_MergeList_Sq”暗示了我们正在处理一个与线性表合并相关的项目,可能是一个程序或代码库,其中包含了名为“MergeList_Sq”的压缩文件,该文件包含了一个名为“MergeList_Sq.cpp...
**WinMerge:强大的代码比较与合并工具** WinMerge是一款高效且易用的代码比较工具,类似于知名的Beyond Compare,但它提供了一种免注册码的使用体验,对于开发者和日常文件管理用户来说,它是一个非常实用的选择。...
【开源软件 WinMerge 代码详解】 WinMerge 是一个在开源社区广受欢迎的文件对比与合并工具,主要用于文本文件、源代码文件甚至整个目录结构的差异分析。它的主要功能包括两个或更多文件的逐行比较、合并冲突以及...
WinMerge是一款强大的文本和文件比较工具,尤其在IT行业中,它是开发者和版本控制使用者的得力助手。这个软件能够帮助用户高效地对比不同版本的代码或者其他文本文件,从而快速定位和理解版本之间的差异。 首先,...
WinMerge是一款强大的文本比较工具,尤其在IT行业中,它被广泛用于代码的差异对比和版本控制。这款软件能够帮助开发者迅速地找出两个文件或者目录之间的差异,并提供方便的合并功能,极大地提升了工作效率。 标题...
Araxis Merge是一款在Windows操作系统中广泛使用的专业级文件比较与合并工具,尤其受到程序员和IT专业人士的青睐。这款软件能够帮助用户快速识别并解决代码冲突,对比文本文件、目录和版本控制系统中的差异,极大地...
WinMerge是一款功能强大的文件和目录比较工具,尤其在IT领域中,它被广泛用于代码版本控制、合并代码差异以及同步不同计算机之间的文件。WinMerge以其直观的用户界面和高效的对比功能,使得文件比较和合并变得轻松...
Araxis Merge是一款备受推崇的文件比较工具,尤其在IT专业人士中广受欢迎。它以其强大的功能、易用性和高效性著称,被誉为最好用的比较工具。这个“AraxisMerge绿色版”是免安装版本,无需复杂的安装过程,用户可以...
在当今软件开发和文档管理的环境中,Araxis Merge 6.0已成为IT专业人士不可或缺的工具之一。它不仅具备强大的文件比较与合并功能,还通过其直观的可视化界面,大大提升了工作效率。本文将深入探讨Araxis Merge 6.0的...
本文将深入探讨“Image Merge”这一主题,它涉及到如何将两幅图像合并成一幅新的图像。我们将主要关注`image.merge`功能以及其在实际应用中的使用。 在OpenCV库中,`merge`函数是一个关键的图像处理操作,它允许...
标题中的"two-phase-merge_sort-.rar_2phase merge sort_merge_sort_two merge"指的是一个采用两阶段归并排序算法的程序或文档集合。这个算法是针对大数据量、无法一次性加载到内存中的情况设计的,常见于外部排序...
WinMerge是一款功能强大的文本和文件比较工具,尤其在Java开发领域中被广泛使用。它能够帮助开发者们快速、准确地找出两个代码文件之间的差异,从而提高工作效率,减少因人为疏忽导致的错误。这款工具支持多种文件...
**WinMerge:强大的文件比较与合并工具** WinMerge是一款高效且易于使用的文件比较软件,尤其在IT领域中,它被广泛用于代码版本控制、文档差异分析等场景。该软件能够帮助用户快速识别并解决文件之间的差异,从而...
**WinMerge:强大的文件与目录比较工具** WinMerge是一款高效且易用的文件比较软件,尤其在编程和版本控制领域中被广泛使用。它能够帮助用户进行行级的文本文件对比,找出两个文件或目录之间的差异,从而快速定位并...
**Win Merge:一款强大的文件与文件夹比较工具** 在IT领域,经常需要处理不同版本的文件或代码,这时,一个高效的文件比较工具就显得尤为重要。Win Merge是一款深受开发者和普通用户喜爱的免费文件和文件夹比较工具...
《WinMerge文件比较工具详解》 在日常的软件开发、文档编辑或版本控制工作中,我们经常需要比较两个文件或文件夹的差异,以便找出不同之处并进行修改。这时,WinMerge就成为了一款非常实用的文件比较工具。本文将...
**WinMerge:强大的文件比较与合并工具** WinMerge是一款在IT行业中广泛应用的文件比较工具,尤其对于软件开发者和版本控制使用者来说,它是一款不可或缺的辅助软件。标题中的"WinMerge"正是这款工具的名字,它的...
**WinMerge工具详解** WinMerge是一款非常实用的开源文件比较工具,特别适合于开发者和日常用户进行文件或代码的差异对比。它具有直观的界面,支持Windows操作系统,并且提供了免安装版本,方便用户直接下载使用,...
《Simpo PDF Merge and Split:一体化的PDF处理工具》 Simpo PDF Merge and Split是一款专为用户设计的高效、易用的PDF管理软件,它集成了PDF文件的合并与分割功能,极大地提升了用户在处理PDF文档时的工作效率。...