没有合适的资源?快使用搜索试试~ 我知道了~
Oracle的函数merge的用法
需积分: 43 5 下载量 37 浏览量
2011-10-23
08:02:47
上传
评论
收藏 95KB DOC 举报
温馨提示
试读
12页
带你了解oracle的merge用法,一起了解oracle的merge用法!
资源推荐
资源详情
资源评论
网址:
http://blog.csdn.net/xzknet/archive/2008/04/09/2267529.aspx
MERGE 语句是 Oracle9i 新增的语法,用来合并 UPDATE 和 INSERT 语句。通过
MERGE 语句,根据一张表或子查询的连接条件对另外一张表进行查询,连接条件匹配上的进
行 UPDATE,无法匹配的执行 INSERT。这个语法仅需要一次全表扫描就完成了全部工作,执
行效率要高于 INSERT+UPDATE。
MERGEINTOtable_nameAStable_alias
USING(table|view|sub_query)ASalias
ON(joincondition)
WHENMATCHEDTHEN
UPDATESET
col1=col_val1,
col2=col2_val
WHENNOTMATCHEDTHEN
INSERT(column_list)
VALUES(column_values);
还是
MERGEINTOtable_nameAStable_alias
USING(table|view|sub_query)ASalias
ON(joincondition)
WHENMATCHEDTHEN
UPDATEtable_nameSET
col1=col_val1,
col2=col2_val
WHENNOTMATCHEDTHEN
INSERT(column_list)
VALUES(column_values);
下面看个具体的例子:Ghttp://blog.itpub.net/post/468/14844
CREATETABLETASSELECTROWNUMID,A.*FROMDBA_OBJECTSA;
表已创建。
CREATETABLET1AS
SELECTROWNUMID,OWNER,TABLE_NAME,CAST('TABLE'ASVARCHAR2(100))OBJE
CT_TYPE
FROMDBA_TABLES;
表已创建。
MERGEINTOT1USINGT
ON(T.OWNER=T1.OWNERANDT.OBJECT_NAME=T1.TABLE_NAMEANDT.OBJECT_T
YPE=T1.OBJECT_TYPE)
WHENMATCHEDTHENUPDATESETT1.ID=T.ID
WHENNOTMATCHEDTHENINSERTVALUES(T.ID,T.OWNER,T.OBJECT_NAME,T.OBJE
CT_TYPE);
6165 行已合并。
SELECTID,OWNER,OBJECT_NAME,OBJECT_TYPEFROMT
MINUS
SELECT*FROMT1;
未选定行
MERGE 语法其实很简单,下面稍微修改一下例子。
SQL> DROP TABLE T;
表已丢弃。
SQL> DROP TABLE T1;
表已丢弃。
SQL> CREATE TABLE T AS SELECT ROWNUM ID, A.* FROM DBA_OBJECTS A;
表已创建。
SQL> CREATE TABLE T1 AS SELECT ROWNUM ID, OWNER, TABLE_NAME FROM
DBA_TABLES;
表已创建。
SQL> MERGE INTO T1 USING T
2 ON (T.OWNER = T1.OWNER AND T.OBJECT_NAME = T1.TABLE_NAME)
3 WHEN MATCHED THEN UPDATE SET T1.ID = T.ID
4 WHEN NOT MATCHED THEN INSERT VALUES (T.ID, T.OWNER,
T.OBJECT_NAME);
MERGE INTO T1 USING T
*
ERROR 位于第G1 行:
ORA-30926: 无法在源表中获得一组稳定的行
这个错误是使用 MERGE 最常见的错误,造成这个错误的原因是由于通过连接条件得到的
T 的记录不唯一。最简单的解决方法类似:
SQL> MERGE INTO T1
2 USING (SELECT OWNER, OBJECT_NAME, MAX(ID) ID FROM T GROUP BY
OWNER, OBJECT_NAME) T
3 ON (T.OWNER = T1.OWNER AND T.OBJECT_NAME = T1.TABLE_NAME)
4 WHEN MATCHED THEN UPDATE SET T1.ID = T.ID
5 WHEN NOT MATCHED THEN INSERT VALUES (T.ID, T.OWNER,
T.OBJECT_NAME);
5775 行已合并。
另外,MERGE 语句的 UPDATE 不能修改用于连接的列,否则会报错,详细信息可以参考:
==============================================
=================
剩余11页未读,继续阅读
资源评论
sageparadise
- 粉丝: 48
- 资源: 20
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- AUTOSAR SPEC, HW TEST
- thingsBoard仪表板黑暗主题切换
- PS Tray Factory 3.31 最终 河谐版
- 鞋子(真实和 AI 生成的图像)数据集 JPG(2K+图像)
- C#的Winform通过GDI+以及Datatable绘制基于CSV文件的风羽图
- 3LP01C-D-VB一款P-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- 三菱PLC例程源码定型机超喂
- 3LN01C-TB-H-VB一款N-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- 13章Go微服务精讲:Go-Zero全流程实战即时通讯
- 3J14-VB一款P-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功