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

 

posted @ 2022-12-07 17:15  龚一半  阅读(453)  评论(0编辑  收藏  举报