- 浏览: 1343084 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (453)
- Struts2 (4)
- Struts1 (16)
- Spring (9)
- Hibernate (5)
- AJAX (16)
- MS Server (9)
- Oracle (35)
- 测试技术 (5)
- 其他 (37)
- JSF (1)
- EJB (5)
- ASP.NET (9)
- iBATIS (5)
- Struts Spring Hibernate (2)
- HTML (12)
- Eclipse使用 (5)
- 设计模式 (5)
- JSP (32)
- 正则表达式 (2)
- 服务器 (12)
- Java基础 (48)
- MySQL (4)
- 面试 (22)
- UML (1)
- 数据结构 (3)
- Ant (2)
- 规范 (4)
- JavaScript (29)
- 软件使用及技巧 (25)
- PHP (1)
- DWR (3)
- FreeMarker (1)
- ExtJs (17)
- JFreeChart (9)
- Reports (2)
- JavaException (1)
- Java Mail (1)
- Flex (9)
- 异常 (12)
- Log4j (2)
- WebService (1)
- jQuery (1)
- Sybase (2)
- myeclipse_plugin (2)
- Linux (5)
- jbpm (2)
- SCM (1)
- mongoDB (1)
最新评论
-
lihua2008love:
<typeAlias alias="User& ...
IBATIS简单操作 -
lihua2008love:
...
关于项目框架设计的一点学习 -
c_jinglin:
我使用<OBJECT CLASSID="cls ...
这就是个静态页面通过js控制mscomm对某com设备进行访问的例子. -
zlbjava:
赞,用了还不错
java获取请求的ip地址,并解析ip所属地区 -
完美天龙:
cs842813290 写道楼主,我明白的地方:在链表已有N个 ...
JAVA实现双向链表
Oracle9i引入了MERGE命令,你能够在一个SQL语句中对一个表同时执行inserts和updates操作. MERGE命令从一个或多个数据源中选择行来updating或inserting到一个或多个表.在Oracle 10g中MERGE有如下一些改进:
1、UPDATE或INSERT子句是可选的
2、UPDATE和INSERT子句可以加WHERE子句
3、在ON条件中使用常量过滤谓词来insert所有的行到目标表中,不需要连接源表和目标表
4、UPDATE子句后面可以跟DELETE子句来去除一些不需要的行
首先创建示例表:
1、可省略的UPDATE或INSERT子句
在Oracle 9i, MERGE语句要求你必须同时指定INSERT和UPDATE子句.而在Oracle 10g, 你可以省略UPDATE或INSERT子句中的一个. 下面的例子根据表NEWPRODUCTS的PRODUCT_ID字段是否匹配来updates表PRODUCTS的信息:
在上面例子中, MERGE语句影响到是产品id为1502, 1601和1666的行. 它们的产品名字和种 类被更新为表newproducts中的值. 下面例子省略UPDATE子句, 把表NEWPRODUCTS中新的PRODUCT_ID插入到表PRODUCTS中, 对于在两个表中能够匹配上PRODUCT_ID的数据不作任何处理. 从这个例子你能看到PRODUCT_ID=1700的行被插入到表PRODUCTS中.
2、带条件的Updates和Inserts子句
你能够添加WHERE子句到UPDATE或INSERT子句中去, 来跳过update或insert操作对某些行的处理. 下面例子根据表NEWPRODUCTS来更新表PRODUCTS数据, 但必须字段CATEGORY也得同时匹配上:
在这个例子中, 产品ID为1502,1601和1666匹配ON条件但是1666的category不匹配. 因此MERGE命令只更新两行数据. 下面例子展示了在Updates和Inserts子句都使用WHERE子句:
注意由于有WHERE子句INSERT没有插入所有不匹配ON条件的行到表PRODUCTS.
3、无条件的Inserts
你能够不用连接源表和目标表就把源表的数据插入到目标表中. 这对于你想插入所有行到目标表时是非常有用的. Oracle 10g现在支持在ON条件中使用常量过滤谓词. 举个常量过滤谓词例子ON (1=0). 下面例子从源表插入行到表PRODUCTS, 不检查这些行是否在表PRODUCTS中存在:
Oracle 10g中的MERGE提供了在执行数据操作时清除行的选项. 你能够在WHEN MATCHED THEN UPDATE子句中包含DELETE子句. DELETE子句必须有一个WHERE条件来删除匹配某些条件的行.匹配DELETE WHERE条件但不匹配ON条件的行不会被从表中删除.
下面例子验证DELETE子句. 我们从表NEWPRODUCTS中合并行到表PRODUCTS中, 但删除category为ELECTRNCS的行.
产品ID为1502的行从表PRODUCTS中被删除, 因为它同时匹配ON条件和DELETE WHERE条件. 产品ID为1501的行匹配DELETE WHERE条件但不匹配ON条件, 所以它没有被删除. 产品ID为1700 的行不匹配ON条件, 所以被插入表PRODUCTS. 产品ID为1601和1666的行匹配ON条件但不匹配DELETE WHERE条件, 所以被更新为表NEWPRODUCTS中的值.
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的信息:
MERGE INTO products p USING newproducts np ON (p.product_id = np.product_id) WHEN MATCHED THEN UPDATE SET p.product_name = np.product_name, p.category = np.category; 3 rows merged. 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 ROLLBACK; Rollback complete.
在上面例子中, MERGE语句影响到是产品id为1502, 1601和1666的行. 它们的产品名字和种 类被更新为表newproducts中的值. 下面例子省略UPDATE子句, 把表NEWPRODUCTS中新的PRODUCT_ID插入到表PRODUCTS中, 对于在两个表中能够匹配上PRODUCT_ID的数据不作任何处理. 从这个例子你能看到PRODUCT_ID=1700的行被插入到表PRODUCTS中.
MERGE INTO products p USING newproducts np ON (p.product_id = np.product_id) WHEN NOT MATCHED THEN INSERT VALUES (np.product_id, np.product_name, np.category); 1 row merged. 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也得同时匹配上:
MERGE INTO products p USING newproducts np ON (p.product_id = np.product_id) WHEN MATCHED THEN UPDATE SET p.product_name = np.product_name WHERE p.category = np.category; 2 rows merged. 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 rollback;
在这个例子中, 产品ID为1502,1601和1666匹配ON条件但是1666的category不匹配. 因此MERGE命令只更新两行数据. 下面例子展示了在Updates和Inserts子句都使用WHERE子句:
MERGE INTO products p USING newproducts np ON (p.product_id = np.product_id) WHEN MATCHED THEN UPDATE SET p.product_name = np.product_name, p.category = np.category WHERE p.category = 'DVD' WHEN NOT MATCHED THEN INSERT VALUES (np.product_id, np.product_name, np.category) WHERE np.category != 'BOOKS' 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
注意由于有WHERE子句INSERT没有插入所有不匹配ON条件的行到表PRODUCTS.
3、无条件的Inserts
你能够不用连接源表和目标表就把源表的数据插入到目标表中. 这对于你想插入所有行到目标表时是非常有用的. Oracle 10g现在支持在ON条件中使用常量过滤谓词. 举个常量过滤谓词例子ON (1=0). 下面例子从源表插入行到表PRODUCTS, 不检查这些行是否在表PRODUCTS中存在:
MERGE INTO products p USING newproducts np ON (1=0) WHEN NOT MATCHED THEN INSERT VALUES (np.product_id, np.product_name, np.category) WHERE np.category = 'BOOKS' 1 row merged. 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.4、新增加的DELETE子句
Oracle 10g中的MERGE提供了在执行数据操作时清除行的选项. 你能够在WHEN MATCHED THEN UPDATE子句中包含DELETE子句. DELETE子句必须有一个WHERE条件来删除匹配某些条件的行.匹配DELETE WHERE条件但不匹配ON条件的行不会被从表中删除.
下面例子验证DELETE子句. 我们从表NEWPRODUCTS中合并行到表PRODUCTS中, 但删除category为ELECTRNCS的行.
MERGE INTO products p USING newproducts np ON (p.product_id = np.product_id) WHEN MATCHED THEN UPDATE SET p.product_name = np.product_name, p.category = np.category DELETE WHERE (p.category = 'ELECTRNCS') WHEN NOT MATCHED THEN INSERT VALUES (np.product_id, np.product_name, np.category) 4 rows merged. 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
产品ID为1502的行从表PRODUCTS中被删除, 因为它同时匹配ON条件和DELETE WHERE条件. 产品ID为1501的行匹配DELETE WHERE条件但不匹配ON条件, 所以它没有被删除. 产品ID为1700 的行不匹配ON条件, 所以被插入表PRODUCTS. 产品ID为1601和1666的行匹配ON条件但不匹配DELETE WHERE条件, 所以被更新为表NEWPRODUCTS中的值.
发表评论
-
exp和imp,oracle9i导出导入数据,数据库备份,创建用户,删除用户
2009-04-16 21:57 3598执行下面这句,是创建用户 create user testkk ... -
Oracle批量创建用户和导入导出的脚本
2008-12-26 10:36 2531-- 在cmd下执行 SELECT 'exp ' || ... -
DBMS_SESSION.SET_CONTEXT的使用及无效权限问题的解决
2008-12-26 10:34 3083ORA-01031: insufficient privile ... -
sys用户使用@连接符提示无效权限的错误ORA-01031:
2008-12-26 10:30 2759问题:有同事反映,新安装的数据库使用 conn sys/ora ... -
Oracle创建主键时处理重复数据的程序
2008-12-26 10:29 2225/**************************** ... -
Oracle10g安装过程中"无法确定主机的IP地址时产生该异常错误" :解决办法
2008-08-23 08:40 45261. Oracle10g安装过程中出现“无 ... -
Oracle to_date用法
2008-06-26 15:29 3498Oracle to_date用法 日期格式参数 含义说明 D ... -
Java学习常用网站收集
2008-05-14 17:22 3294有网友说Java学习需要官方网站,想一下,发现有些框架的官方网 ... -
ORACLE数据库命名编码规范
2008-05-13 22:37 2237我在“管理”的论坛找到了答案,谁还有更多的,请指教!!! * ... -
ADO&ADO.NET 读取 Oracle 数据集
2008-05-13 22:22 2265使用 ADO.NET 访问 Oracle 9i 存储过程 ht ... -
通过批处理文件启动Oracle服务
2008-05-13 22:16 2115自己家里的机子配置不高,所有Oracle服务都是手动启动、关闭 ... -
Oracle常用及非常用函数
2008-05-12 17:11 5825感于总有些网友提出一 ... -
Oracle 9i的闪回查询概述
2008-05-11 23:59 2520Oracle 9i的闪回查询概述 ... -
使用分析单
2008-05-11 23:41 1082分析函数计算基于行组的值,并可以用来实现rownum伪列表述的 ... -
使用伪列Rownum
2008-05-11 23:31 1581对员工表进行排序,之后显示工资最多的前3名。 这么简单的问题想 ... -
Oracle 数据字典(2)
2008-05-11 19:21 1485创建表的SQL语句如下-- 创建数据表create table ... -
Oracle 数据字典(1)
2008-05-11 19:14 1958Oracle数据库字典介绍 Oracle数据字典是有表和 ... -
AFTER DELETE Trigger
2008-05-11 07:33 3384An AFTER DELETE Trigger means t ... -
Oracle中常见数据类型转换
2008-05-11 07:28 1672To | From | CH ... -
PL/SQL学习笔记一
2008-05-11 07:22 16711、 PL/SQL的塊結構 Declare ...
相关推荐
oracle merge 用法详解
PDF Split-Merge是1个独立工具用于分割,合并PDF文件,允许你分割/合并大的PDF文件到小一些的PDF文件。 PDF Split Merge提供易用的图形界面应用程序和命令行应用程序。 分割功能可以让你基于页组,页范围分割1个或...
npm-merge-driver安装 自动合并package-lock.json冲突的软件包。 很大程度上基于 ,在软件包安装时进行自动设置,并且只有一个小的依赖项来进行ci检查。 用生成的目录 安装 安装运行 npm i --save-dev npm-...
bootstrap table实现合并单元格效果,切换第二页也合并单元格效果,需要依赖于bootstrap-table.js,bootstrap table.css
资源来自pypi官网。 资源全名:triangular-grid-merge-1.0.0.tar.gz
在对传统的Sort-Merge-Join算法进一步研究的基础上,提出了一种改进的闪存数据库Sort-Merge-Join算法。该算法只对小关系进行外排序,避免了大关系的外排序,节省了大量时间,同时最小化了中间临时表,达到了少写闪存...
该模块使用 。 无需特殊软件即可运行该模块。 但是必须存在Java 6或更高版本。 该项目目前正在维护! 欢迎通过PR捐款。 我将尝试添加一个有帮助的指南。 如果您受益于此项目,请通过捐赠原始作者一杯咖啡 当前仅...
auto-merge-language是自动替换Android项目中的strings.xml多语文案工具
前端开源库-geojson-mergegeojson合并,合并多个geojson文件
PDF合并分割工具(Ap PDF Split-Merge) v3.2 绿色中文版,用起来就是爽。
yaml-merge 合并YAML文件的超级简单工具。 安装 对于命令行 npm install -g @alexlafroscia/yaml-merge 通过节点使用 npm install --save @alexlafroscia/yaml-merge 用法 yaml-merge接收一系列yaml文件,并从左到...
webpack-merge, 为 web pack设计的合并( MIT ) web pack合并-为web pack设计的合并 webdav合并提供了一个merge函数,它连接数组并合并创建新对象的对象,如果遇到函数,它将执行它们,通过算法运行结果,然后再将...
关于数据库oracle merge RGE INTO newmergetest m using ...
用法 合并(a,b,选项) merge.all([a,b,...,z], options ) 其中a , b , z是而options是 options对象。 const merge = require ( 'babel-merge' ) ; const together = merge ( { pre
npm-merge-driver(1)-用于自动合并锁文件的git merge驱动程序自动设置(推荐): 要立即开始使用它: $ npx npm-merge-driver install --global或按项目在本地安装: $ cd /path/to/git/repository$ npx npm-merge...
关于Oracle中merge into的用法,比较实用哦
该插件提供了一种合并多个配置文件并将结果作为JSON对象检索的方法。 使用合并JSON文件 该加载器期望接收具有以下格式的配置JSON对象: { "files": [ // path to all files to load/merge together ] } files...
runoob-algorithm-merge-sort.zip
test-merge-yaml