登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

樱之花

叶散的时候,你明白欢聚;花谢的时候,你明白青春.

 
 
 

日志

 
 
关于我

分类中“我的实验室”是我在日常工作中的一些知识总结,有些写的比较匆忙,可能大家在阅读时会产生困扰,后期有时间我会重新整理编辑,谢谢大家的到访,您们的支持是我前进的动力!

oracle的INSERT、UPDATE、MERGE  

2009-12-21 08:40:55|  分类: ORACLE |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
/*用COURSE表为模板,创建一张新表COURSE_NEW,并且包括COURSE表的所有记录 */

CREATE TABLE COURSE_NEW AS SELECT * FROM COURSE;

/*清空COURSE_NEW表中的所有记录*/
TRUNCATE TABLE COURSE_NEW;

/*往COURSE_NEW表中增加以下记录:
NO COURSE_NAME
A001 ORACLE数据库管理
A002 SQLSERVER安全指南
A003 Hibernate全攻略
A004 .NET
*/

INSERT INTO COURSE_NEW(NO,COURSE_NAME)
SELECT 'A001','ORACLE数据库管理' FROM DUAL
UNION
SELECT 'A002','SQLSERVER安全指南' FROM DUAL
UNION
SELECT 'A003','Hibernate全攻略'  FROM DUAL
UNION
SELECT 'A004','.NET' FROM DUAL;
COMMIT;


/*根据COURSE表中的NO字段,用COURSE_NEW更新COURSE表*/

UPDATE  (SELECT /*+ BYPASS_UJVC */ A.NO,A.COURSE_NAME,B.NO AS BNO,B.COURSE_NAME AS BNAME
               FROM COURSE A,COURSE_NEW B
               WHERE A.NO=B.NO)
SET NO=BNO,COURSE_NAME=BNAME
COMMIT;


/*分别使用INSERT\UPDATE和MERGE命令实现,用COURSE_NEW更新COURSE表中的记录,如果存在,则更新,不存在则INSERT*/
--用MERGE实现如下:

INSERT INTO COURSE_NEW(NO,COURSE_NAME) --为了便于操作,先在COURSE_NEW中插入一条记录
SELECT 'A005','HCNE网络工程师' FROM DUAL;
COMMIT;
MERGE INTO COURSE A
USING COURSE_NEW B ON(A.NO=B.NO)
WHEN MATCHED THEN
UPDATE SET A.COURSE_NAME=B.COURSE_NAME
WHEN NOT MATCHED THEN
INSERT(A.NO,A.COURSE_NAME)
VALUES(B.NO,B.COURSE_NAME);
COMMIT;

--用INSERT\UPDATE实现如下

INSERT INTO COURSE_NEW(NO,COURSE_NAME)--为了便于操作,再在COURSE_NEW中插入一条记录
SELECT 'A006','CCNA网络工程师' FROM DUAL;
COMMIT;

--利用UPDATE对于编号相同的字段进行更新
UPDATE COURSE A SET(NO,COURSE_NAME)=
       (SELECT B.NO,B.COURSE_NAME
       FROM COURSE_NEW B
       WHERE A.NO=B.NO )
WHERE  EXISTS
       (SELECT 1 FROM COURSE_NEW B
            WHERE A.NO=B.NO);
COMMIT;
--利用INSERT对于原表中没有的进行添加
INSERT INTO COURSE
SELECT * FROM COURSE_NEW A
        WHERE NOT EXISTS(SELECT 1 FROM COURSE B WHERE A.NO=B.NO);
COMMIT;


/*用一组语句代替对实现对全表的更新操作*/
--先用COURSE_TEST记录COURSE表的状态,以便在删除COURSE之后记录相关字段

CREATE TABLE COURSE_TEST AS SELECT * FROM   COURSE  WHERE ROWNUM<1;
INSERT /*+ APPEND */ INTO COURSE_TEST
SELECT * FROM COURSE WHERE ROWNUM<5;
COMMIT;
--删除COURSE表
TRUNCATE TABLE COURSE;
--更新COURSE表
INSERT /*+APPEND*/ INTO COURSE
SELECT A.NO,A.COURSE_NAME FROM COURSE_NEW A,COURSE_TEST B WHERE A.NO=B.NO;
COMMIT;

  评论这张
 
阅读(1703)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018