/*
建立新表
用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;