使用该MERGE INTO 是因为最近工作中的需要,首先说下使用的原由,数据模型中的日期类型是varchar2(10)的类型,如今要修改为DATE类型的,保证数据的不丢失,共涉及到200多张表,425 个字段,所以要一个一个字段的数据备份是不可能的。
MERGE INTO 的用法就是有则更新,无则插入,从而保证了每个字段数据的唯一性,将所有的字段数据都放到一张配置表中,使用游标对配置表进行循环遍历便可一个个的去出进行备份。
举例其中一个:
MERGE INTO shu_ju A --要插入数据的表
USING (SELECT ROWID ROW_ID,
REPORT_DATE,
'PC_PROJECT_INFORMATION' TABLE_NAME,
'REPORT_DATE' COL_NAME
FROM PC_PROJECT_INFORMATION
WHERE REPORT_DATE IS NOT NULL) B --- 关联的表(需要备份的表,这里可以是子查询,表,视图等)
ON (A.ROW_ID = B.ROW_ID AND A.TABLE_NAME=B.TABLE_NAME AND A.COLUMN_NAME=B.COL_NAME) ---条件
WHEN MATCHED THEN ---满足条件时执行更新操作(记得没有括号)
UPDATE SET
A.OLD_DATA=B.REPORT_DATE
WHEN NOT MATCHED THEN---不满足条件时执行插入操作
INSERT VALUES(B.ROW_ID,B.REPORT_DATE,'PC_PROJECT_INFORMATION','REPORT_DATE')