oracle 学习(四)

/*
创建新表
用COURSE表为模板,创建一张新表COURSE_NEW,并且包括COURSE表的所有记录。
*/
--删除已存在的表

DROP TABLE course_new;

CREATE TABLE course_new AS SELECT * FROM COURSE;

select * from course_new
/*
清空COURSE_NEW表中的所有记录。
*/

TRUNCATE TABLE course_new;

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

insert into course_new
      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.COURSE_NAME,B.COURSE_NAME AS BCOURSE_NAME
                FROM COURSE A,COURSE_NEW B
                WHERE A.COURSE_NO=B.COURSE_NO)
SET COURSE_NAME=BCOURSE_NAME;

--2:
UPDATE  COURSE A SET (A.COURSE_NO,A.COURSE_NAME)=
        (SELECT B.COURSE_NO,B.COURSE_NAME
                FROM COURSE_NEW B
                WHERE A.COURSE_NO=B.COURSE_NO
                      AND ROWNUM<2)
WHERE EXISTS(SELECT 1 FROM COURSE_NEW B WHERE A.COURSE_NO=B.COURSE_NO);


COMMIT;

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

--使用INSERT/UPDATE
UPDATE 
        (SELECT /*+ BYPASS_UJVC */A.COURSE_NAME,B.COURSE_NAME AS BCOURSE_NAME
                FROM COURSE A,COURSE_NEW B
                WHERE A.COURSE_NO=B.COURSE_NO)
SET COURSE_NAME=BCOURSE_NAME;

INSERT INTO COURSE
SELECT * FROM COURSE_NEW A
       WHERE NOT EXISTS(SELECT 1 FROM COURSE B WHERE A.COURSE_NO=B.COURSE_NO);
      
COMMIT;
      
--MERGE命令实现

MERGE INTO COURSE A
      USING COURSE_NEW B ON (A.COURSE_NO=B.COURSE_NO)
      WHEN MATCHED THEN
           UPDATE SET COURSE_NAME=B.COURSE_NAME
      WHEN NOT MATCHED THEN
           INSERT (A.COURSE_NO,A.COURSE_NAME)
           VALUES (B.COURSE_NO,B.COURSE_NAME);
          
--用一组语句代替对实现对全表的更新操作。
CREATE TABLE COURSE_TMP AS SELECT * FROM COURSE_NEW;

TRUNCATE TABLE COURSE_NEW;

INSERT /*+APPEND */ INTO COURSE_NEW
SELECT COURSE_NO,'ABC' FROM COURSE_TMP;

COMMIT;

DROP TABLE COURSE_TMP;

--代替delete FROM COURSE_NEW WHERE COURSE_NO>'A001' OR COURSE_NO<'A001'
CREATE TABLE COURSE_TMP AS SELECT * FROM COURSE_NEW WHERE COURSE_NO='A001'

TRUNCATE TABLE COURSE_NEW;

INSERT /*+APPEND */ INTO COURSE_NEW
SELECT * FROM COURSE_TMP;

COMMIT;

DROP TABLE COURSE_TMP; 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值