侧边栏壁纸
  • 累计撰写 73 篇文章
  • 累计创建 30 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Oracle数据库MERGE INTO用法

欧泡果奶
2024-07-13 / 0 评论 / 0 点赞 / 9 阅读 / 0 字

Oracle数据库中的MERGE INTO语句用于将数据合并(‌插入、‌更新或删除)‌到目标表。‌这个语句通常与USING子句一起使用,‌允许在一个SQL语句中对一个表同时执行插入和更新操作。‌

语法规则

MERGE INTO target_table tt  -- 目标表
USING source_table st -- 关联表
ON (tt.id = st.id AND tt.age = st.age ) -- 是否唯一条件,可以是多个 
 
WHEN MATCHED AND tt.name <> st.name THEN  -- 1、满足条件--带额外条件
WHEN MATCHED THEN  -- 2、满足条件-- 不带额外条件
UPDATE SET  -- 执行更新操作,注意没有 表名 update set
    tt.name = st.name ,
    tt.age = st.age 
 
[ WHEN NOT MATCHED THEN ]  -- 3、不满足条件, 可选,非必须语句
INSERT (id, name) VALUES (st.id, st.name);  -- 执行添加操作,注意没有表名 insert

示例:存在则更新,不存在则插入(Mybatis、使用List作为关联表)

MERGE INTO TEST_TABLE a
USING (
    <foreach collection="list" item="item" open="" close="" separator="union all">
        SELECT
            #{item.id,jdbcType=VARCHAR} AS ID,
            #{item.name,jdbcType=VARCHAR} AS NAME,
            #{item.age,jdbcType=VARCHAR} AS AGE,
            #{item.createBy,jdbcType=VARCHAR} AS CREATE_BY,
            #{item.createTime,jdbcType=VARCHAR} AS CREATE_TIME
        FROM DUAL
    </foreach>
    ) b ON (a.ID = b.ID)
WHEN MATCHED THEN UPDATE SET a.NAME = b.NAME, a.AGE = b.AGE a.CREATE_BY = b.CREATE_BY ,a.CREATE_TIME = b.CREATE_TIME
WHEN NOT MATCHED THEN INSERT(a.ID,a.NAME,a.AGE,a.CREATE_BY,a.CREATE_TIME)
VALUES (b.ID,b.NAME,b.AGE,b.CREATE_BY,b.CREATE_TIME)
0

评论区