Oracle MARGE INTO 快速理解与使用方法
快速理解:MARGE INTO(刷新数据)
在Oracle中使用于Procedure(程序)中,在Procedure中对数据表Table进行的操作时,既可以使用INSERT INTO语句用于插入数据,也可以使用MARGE INTO语句用于刷新数据。相较于INSERT INTO语句只能插入数据,MARGE语句可以刷新已有的数据避免插入重复数据。
比如说,我要插入下面16个字段的数据(字段内容忽略):
insert into crmii.T_STAT_KHJF_R(rq,khh,qdid,jyl,jyl_gjzh,yj,yj_gjzh,jyj,jyj_gjzh,crm_jyj_z,crm_jyj,yxh,yyb,khrq,zjkh,SKKH) select * from XXXXXXX
如果Procedure执行一遍,则会插入成功1次,但如果在重复执行的JOB中,就会跟随JOB执行次数的增多,重复插入数据
不如我们来使用marge into (忽略字段内容):
MERGE INTO CRMII.T_STAT_SCZR_ZYXHRQ T1 USING (SELECT KHH, N1 AS ZYXHRQ FROM CRMII.TMP_COMMON1 WHERE N1 IS NOT NULL) T2 ON (T1.KHH = T2.KHH) WHEN MATCHED THEN UPDATE SET T1.ZYXHRQ = NVL(T1.ZYXHRQ, T2.ZYXHRQ);
大致的逻辑是:
刷新表()
使用数据集()
刷新规则()
符合规则,则()
不符合规则,则()
ps.规则判定内可以同时取到被刷新表和使用数据集的数据
标准格式如下:
MERGE INTO XXX USING (SELECT * FROM TTT) ON (XXX. = TTT.) WHEN MATCHED THEN UPDATE SET XXXXXXXX WHEN NOT MATCHED THEN INSERT INTO XXX