资源描述:
《oracle中merge关键字的用法》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、Oracle中merge关键字的用法在Oracle9iR2版中引入的MERGE语句通常被称作“更新插入”(upsert),因为使用MERGE可以在同一个步骤中更新(update)并插入(insert)数据行,对于抽取、转换和载入类型的应用软件可以节省大量宝贵的时间,比如向数据仓库中加载数据,数据仓库中没有的数据行可以插入到数据仓库中,而已经存在的数据行也同时被更新。 在MERGE语句引入的时候,需要同时使用一条UPDATE和一条INSERT语句,顺序也是固定的(先使用UPDATE语句,然后是INSERT语句)。如果您只需要使用其中的某一条一句
2、,您只需要使用现有的INSERT或者UPDATE语句,而不必使用MERGE语句,而删除数据可以使用DELETE语句。 在Oracle10gR1版中,MERGE语句发生了变化,UPDATE或INSERT语句不再是必须的,而是可选项,您可以两者都用也可以都不用,而且,UPDATE语句也具备了DELETE的功能,您可以在同一个步骤中对现有的有效记录进行升级并清理废弃的记录。 列表A创建了一个表格列出现有项目:项目号码、标题、开始日期、进度完成比例以及员工对项目的响应,还创建了一个事务表格使用MERGE语句进行升级批处理。 DROPTABLEop
3、en_projects; DROPTABLEproject_updates; CREATETABLEopen_projects (pnoNUMBER(6)PRIMARYKEY, titleVARCHAR2(40), startdateDATE, pctdoneNUMBER(3), empnoNUMBER(6) ); INSERTINTOopen_projectsVALUES (10,'Inventoryservers','08-JAN-07',0,206); INSERTINTOopen_projectsVALUES (
4、20,'UpgradeOracleonSRV01','15-JAN-07',0,206); INSERTINTOopen_projectsVALUES (30,'Conductskillsassessment','22-JAN-07',0,210); CREATETABLEproject_updates (actionCHAR(1), pnoNUMBER(6), pctdoneNUMBER(3), empnoNUMBER(6) ); INSERTINTOproject_updatesVALUES ('C',10,50,214
5、); INSERTINTOproject_updatesVALUES ('D',20,NULL,NULL); COMMIT; 列表A 一个典型的MERGE语句从识别表格开始执行升级,而且对现有的记录进行筛选测试: MERGEINTOopen_projectsop USINGproject_updatespu ON(op.pno=pu.pno) ... 表格open_projects会接受更新的数据,而project_updates表格则不会改变,如果项目号码(pno)在两个表格中都一样,那么数据行则被认为是相同的。 MERG
6、E语句剩下的部分是更新语句,以及DELETEWHERE语法。 ... WHENMATCHEDTHEN UPDATESETpctdone=pu.pctdone, empno=pu.empno DELETE WHEREpu.action='D'; 列表B展示了MERGE语句运行前后的表格情况。 SQL>@mergedel_b PNOTITLESTARTDATEPCTDONEEMPNO -------------------------------------------------------------------------
7、------ 10Inventoryservers08-JAN-070206 20UpgradeOracleonSRV0115-JAN-070206 30Conductskillsassessment22-JAN-070210 APNOPCTDONEEMPNO ------------------------------- C1050214 D20 2rowsmerged. PNOTITLESTARTDATEPCTDONEEMPNO ----------------------------------------------
8、--------------------------------- 10Inventoryservers08-JAN-0750214 30Cond