oracle insert和update,INSERTUPDATE和MERGE (转)

/*用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;

/*分别使用INSERTUPDATE和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;

--用INSERTUPDATE实现如下

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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值