oracle - merge语法

这是处理数据,必须掌握的语句之一,学会这个,就能处理大部分的需求了。

效果:有两个查询结果,根据其中一个,更新另一个。

MERGE INTO (
    -- 目标结果集,需要更新的结果集
    SELECT * FROM A_EVT_NOTICE_SMY WHERE DATA_DT = '20230101'
) TAR
USING (
    -- 源结果集,更新依据的结果集
    SELECT A.* 
    FROM A_CIF_CIFP_CUST_INFO_SMY A
    INNER JOIN A_EVT_NOTICE_SMY B 
    ON A.CUST_NO = B.CUST_NO 
    WHERE A.DATA_DT = '20230101'
) SRC
-- 两个结果集关联的条件
ON (TAR.CUST_NO = SRC.CUST_NO)
WHEN MATCHED THEN
    -- do sth. when 命中
    UPDATE SET TAR.CUST_NO = SRC.CUST_NO, TAR.ID_CARD = SRC.ID_CARD
WHEN NOT MATCHED THEN
    -- do sth. when 未命中
    INSERT
        (DATA_DT, INST_NO, CUST_MGR, CUST_NO, ID_CARD)
    VALUES
        (SRC.DATA_DT, SRC.INST_NO, SRC.CUST_MGR, SRC.CUST_NO, SRC.ID_CARD);

COMMIT;

实际操作之后,可能会遇到的问题:

  1. 把查询写得很复杂(目标结果集),程序无法判断查询结果来自什么表。

这会导致语句执行失败,尽可能改成 SELECT * FROM TABLE 的格式。

  1. 产生一对多关联时,无法 MERGE,需要对多余的数据进行清理或者去重

posted on   疯狂的妞妞  阅读(124)  评论(0编辑  收藏  举报

(评论功能已被禁用)
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示