Oracle实现同表更新或插入的三种方案


    目录
  • 一、需求
  • 二、实现
    • 2.1 方案一
    • 2.2 方案二
    • 2.3 方案三

    一、需求
    现在有一张count表,存在两个字段name和count,分别记录输入的名称以及出现的次数
    
    要求输入的名称若在表中未存在,则新增,并初始化count的值为1
    若在表中已经存在,则将count值加一
    二、实现
    2.1 方案一
    在处理前统计name出现的次数,若大于一,则修改,否则为新增
    
    2.2 方案二
    根据上面的逻辑,使用plsql实现
    
DECLARE
  v_count NUMBER;
  v_name char(20);
BEGIN
  v_name:='a';  

  SELECT COUNT(*)
  INTO v_count
  FROM (SELECT name, COUNT(*) as count
        FROM count
        GROUP BY name)
  WHERE name = v_name;
  
  IF v_count >= 1 THEN
    UPDATE count
    SET count = count + 1
    WHERE name = v_name;
  ELSE
    INSERT INTO count values(v_name,1);
  END IF;
END;

    更新:此时往表中插入一条已经存在的name a,只需修改v_name 的值为'a'
    
    新增:此时往表中插入一条不存在的name c,修改v_name 的值为'c'
    
    2.3 方案三
    根据上面的逻辑,使用merge into实现
    
merge into count c1
using ( select count(*) count from count c2 where c2.name = 'a' ) c3
on (c3.count > 0)
when matched then
    update set c1.count = c1.count + 1 where c1.name = 'a'
when not matched then
    insert values('a',1) ;

    现在清空数据表,新增一行数据a
    
    再次点击执行,则执行修改逻辑
    
    到此这篇关于Oracle实现同表更新或插入的方案总结的文章就介绍到这了,更多相关Oracle同表更新或插入内容请搜索电脑手机教程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持电脑手机教程网!